import { NextRequest, NextResponse } from 'next/server'; import { verifySession } from '@/lib/session'; import { db } from '@/lib/db'; import { activityLogs, users } from '@/lib/db/schema'; import { eq, desc, isNull, or } from 'drizzle-orm'; export async function GET(request: NextRequest) { try { const session = await verifySession(); if (!session.isAuth || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const { searchParams } = new URL(request.url); const limit = parseInt(searchParams.get('limit') || '20'); const offset = parseInt(searchParams.get('offset') || '0'); // Get activity logs with user details const logs = await db .select({ id: activityLogs.id, action: activityLogs.action, entityType: activityLogs.entityType, entityId: activityLogs.entityId, details: activityLogs.details, ipAddress: activityLogs.ipAddress, userAgent: activityLogs.userAgent, createdAt: activityLogs.createdAt, user: { id: users.id, name: users.name, surname: users.surname, email: users.email, }, }) .from(activityLogs) .leftJoin(users, eq(activityLogs.userId, users.id)) .orderBy(desc(activityLogs.createdAt)) .limit(limit) .offset(offset); return NextResponse.json({ success: true, logs, pagination: { limit, offset, hasMore: logs.length === limit, }, }); } catch (error) { console.error('Error fetching activity logs:', error); return NextResponse.json({ error: 'Failed to fetch activity logs' }, { status: 500 }); } } export async function POST(request: NextRequest) { try { const body = await request.json(); const { action, entityType, entityId, details, ipAddress, userAgent } = body; if (!action || !entityType) { return NextResponse.json({ error: 'Missing required fields' }, { status: 400 }); } const session = await verifySession(); const userId = session.isAuth ? session.userId : null; // Create activity log const [log] = await db .insert(activityLogs) .values({ id: crypto.randomUUID(), userId, action, entityType, entityId, details: details ? JSON.stringify(details) : null, ipAddress, userAgent, createdAt: new Date(), }) .returning(); return NextResponse.json({ success: true, log, }); } catch (error) { console.error('Error creating activity log:', error); return NextResponse.json({ error: 'Failed to create activity log' }, { status: 500 }); } }