Files
alla-tms/src/app/api/employees/[id]/route.ts
2026-07-16 09:53:14 +07:00

101 lines
2.9 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { AuthError, requireOrganizationAccess } from '@/lib/auth/session';
import { getDatabaseErrorMessage } from '@/lib/db-errors';
import {
getEmployeeByIdForOrganization,
softDeleteEmployeeForOrganization,
updateEmployeeForOrganization
} from '@/features/employees/server/employee-data';
import type { EmployeeMutationPayload } from '@/features/employees/api/types';
export async function GET(
_request: NextRequest,
context: { params: Promise<{ id: string }> }
) {
try {
const { organization } = await requireOrganizationAccess();
const params = await context.params;
const employee = await getEmployeeByIdForOrganization({
id: Number(params.id),
organizationId: organization.id
});
if (!employee) {
return NextResponse.json({ message: 'Employee not found' }, { status: 404 });
}
return NextResponse.json({
success: true,
time: new Date().toISOString(),
message: 'Employee loaded successfully',
employee
});
} catch (error) {
if (error instanceof AuthError) {
return NextResponse.json({ message: error.message }, { status: error.status });
}
return NextResponse.json({ message: getDatabaseErrorMessage(error) }, { status: 500 });
}
}
export async function PATCH(
request: NextRequest,
context: { params: Promise<{ id: string }> }
) {
try {
const { organization } = await requireOrganizationAccess();
const params = await context.params;
const body = (await request.json()) as EmployeeMutationPayload;
const employee = await updateEmployeeForOrganization({
id: Number(params.id),
organizationId: organization.id,
payload: body
});
if (!employee) {
return NextResponse.json({ message: 'Employee not found' }, { status: 404 });
}
return NextResponse.json({
success: true,
time: new Date().toISOString(),
message: 'Employee updated successfully',
employee
});
} catch (error) {
if (error instanceof AuthError) {
return NextResponse.json({ message: error.message }, { status: error.status });
}
return NextResponse.json({ message: getDatabaseErrorMessage(error) }, { status: 500 });
}
}
export async function DELETE(
_request: NextRequest,
context: { params: Promise<{ id: string }> }
) {
try {
const { organization } = await requireOrganizationAccess();
const params = await context.params;
await softDeleteEmployeeForOrganization({
id: Number(params.id),
organizationId: organization.id
});
return NextResponse.json({
success: true,
time: new Date().toISOString(),
message: 'Employee deactivated successfully'
});
} catch (error) {
if (error instanceof AuthError) {
return NextResponse.json({ message: error.message }, { status: error.status });
}
return NextResponse.json({ message: getDatabaseErrorMessage(error) }, { status: 500 });
}
}