Initial commit - ERP System

This commit is contained in:
root
2026-05-20 18:58:23 +00:00
commit e174936997
2697 changed files with 1628427 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
// /opt/erp-system/app/api/dashboard/route.ts
import { NextResponse } from 'next/server';
import prisma from '../../../lib/prisma';
import { getServerSession } from "next-auth/next";
import { authOptions } from "../auth/[...nextauth]/route";
export async function GET() {
try {
const session = await getServerSession(authOptions);
if (!session) return NextResponse.json({ error: 'Nicht autorisiert' }, { status: 401 });
const userId = parseInt((session.user as any).id);
const userType = (session.user as any).userType;
// ----------------------------------------------------
// METRIKEN FÜR KUNDEN
// ----------------------------------------------------
if (userType === 'CUSTOMER') {
const [openTicketsCount, closedTicketsCount, recentTickets] = await Promise.all([
prisma.ticket.count({
where: { customerId: userId, status: { in: ['OPEN', 'IN_PROGRESS', 'WAITING_FOR_CUSTOMER'] } }
}),
prisma.ticket.count({
where: { customerId: userId, status: { in: ['RESOLVED', 'CLOSED'] } }
}),
prisma.ticket.findMany({
where: { customerId: userId },
take: 5,
orderBy: { updatedAt: 'desc' },
include: { customer: { select: { companyName: true, firstName: true, lastName: true } } }
})
]);
return NextResponse.json({
userType: 'CUSTOMER',
openTickets: openTicketsCount,
closedTickets: closedTicketsCount,
recentTickets
});
}
// ----------------------------------------------------
// METRIKEN FÜR TEAM-MITARBEITER
// ----------------------------------------------------
const [openTicketsCount, myTicketsCount, recentTickets, timeEntries] = await Promise.all([
prisma.ticket.count({
where: { status: { in: ['OPEN', 'IN_PROGRESS', 'WAITING_FOR_CUSTOMER'] } }
}),
prisma.ticket.count({
where: { assignedToId: userId, status: { in: ['OPEN', 'IN_PROGRESS', 'WAITING_FOR_CUSTOMER'] } }
}),
prisma.ticket.findMany({
take: 5,
orderBy: { updatedAt: 'desc' },
include: { customer: { select: { companyName: true, firstName: true, lastName: true } } }
}),
prisma.timeEntry.aggregate({
_sum: { durationMins: true }
})
]);
const totalMinutes = timeEntries._sum.durationMins || 0;
const totalHours = totalMinutes / 60;
return NextResponse.json({
userType: 'TEAM',
openTickets: openTicketsCount,
myTickets: myTicketsCount,
recentTickets,
totalHours
});
} catch (error) {
console.error("Dashboard Fehler:", error);
return NextResponse.json({ error: 'Ladefehler' }, { status: 500 });
}
}