Rollen Chunk 6: Team-Tab mit Matrix-Kalender und Genehmigungen
This commit is contained in:
1 parent
73ade9d4ec
commit
f35afca3f5
1 file changed
+64
@@ -0,0 +1,64 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { authedRole } from "@/lib/auth";
|
||||
import { getDb, initializeDatabase } from "@/lib/db";
|
||||
import { germanPublicHolidays } from "@/lib/domain/holidays";
|
||||
import { errorResponse, isValidYear } from "@/lib/http";
|
||||
import { getFederalState } from "@/lib/region";
|
||||
import {
|
||||
ensureYearSettings,
|
||||
getWeeklyTargets,
|
||||
listAllUsers,
|
||||
listDeletedVacationRequests,
|
||||
listSickDays,
|
||||
listVacationRequests,
|
||||
sumPendingUnitsByYear,
|
||||
sumVacationUnitsByYear,
|
||||
} from "@/lib/repository";
|
||||
|
||||
export async function GET(request: Request) {
|
||||
const user = await authedRole(request, ["admin", "teamleiter"]);
|
||||
if (user instanceof NextResponse) {
|
||||
return user;
|
||||
}
|
||||
const yearParam = new URL(request.url).searchParams.get("year");
|
||||
if (!isValidYear(yearParam)) {
|
||||
return errorResponse(400, "invalidYear", "Query parameter year must be YYYY.");
|
||||
}
|
||||
const year = Number(yearParam);
|
||||
const db = getDb();
|
||||
initializeDatabase(db);
|
||||
const team = listAllUsers(db).map((member) => {
|
||||
const settings = ensureYearSettings(db, member.id, year);
|
||||
const usedUnits = sumVacationUnitsByYear(db, member.id, year);
|
||||
const pendingUnits = sumPendingUnitsByYear(db, member.id, year);
|
||||
const state = getFederalState(db, member.id);
|
||||
return {
|
||||
id: member.id,
|
||||
name: member.name,
|
||||
email: member.email,
|
||||
role: member.role,
|
||||
entitlementUnits: settings.entitlementUnits,
|
||||
carryoverUnits: settings.carryoverUnits,
|
||||
usedUnits,
|
||||
pendingUnits,
|
||||
remainingUnits: Math.max(
|
||||
0,
|
||||
settings.entitlementUnits +
|
||||
settings.carryoverUnits -
|
||||
usedUnits -
|
||||
pendingUnits,
|
||||
),
|
||||
requests: listVacationRequests(
|
||||
db,
|
||||
member.id,
|
||||
`${year}-01-01`,
|
||||
`${year}-12-31`,
|
||||
),
|
||||
trash: listDeletedVacationRequests(db, member.id).length,
|
||||
sickDays: listSickDays(db, member.id, `${year}-01-01`, `${year}-12-31`),
|
||||
weekdayTargets: getWeeklyTargets(db, member.id),
|
||||
holidays: [...germanPublicHolidays(year, state)],
|
||||
};
|
||||
});
|
||||
return NextResponse.json({ year, team });
|
||||
}
|
||||
Reference in new issue
Block a user