import { NextRequest, NextResponse } from 'next/server'; import { getSession } from '@/lib/session'; import { db } from '@/lib/db'; import { users } from '@/lib/db/schema'; import { eq } from 'drizzle-orm'; import { logActivity, ACTIONS, ENTITY_TYPES } from '@/lib/activity-logger'; export async function GET(request: NextRequest) { try { const session = await getSession(); if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } // Get user profile const [user] = await db .select({ id: users.id, email: users.email, name: users.name, surname: users.surname, role: users.role, createdAt: users.createdAt, }) .from(users) .where(eq(users.id, session.userId)) .limit(1); if (!user) { return NextResponse.json({ error: 'User not found' }, { status: 404 }); } return NextResponse.json({ user: { ...user, createdAt: user.createdAt.toISOString(), }, }); } catch (error) { console.error('Error fetching user profile:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function PATCH(request: NextRequest) { try { const session = await getSession(); if (!session) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const { name, surname } = await request.json(); // Validate required fields if (!name || !surname) { return NextResponse.json({ error: 'Name and surname are required' }, { status: 400 }); } // Get current user data for logging const [currentUser] = await db.select().from(users).where(eq(users.id, session.userId)).limit(1); if (!currentUser) { return NextResponse.json({ error: 'User not found' }, { status: 404 }); } // Update user profile await db .update(users) .set({ name: name.trim(), surname: surname.trim(), updatedAt: new Date(), }) .where(eq(users.id, session.userId)); // Log the activity await logActivity({ userId: session.userId, action: ACTIONS.USER_UPDATE, entityType: ENTITY_TYPES.USER, entityId: session.userId, details: { previousData: { name: currentUser.name, surname: currentUser.surname, }, newData: { name: name.trim(), surname: surname.trim(), }, }, request, }); return NextResponse.json({ success: true, message: 'Profile updated successfully', }); } catch (error) { console.error('Error updating user profile:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }