19 lines
913 B
TypeScript
19 lines
913 B
TypeScript
import { requireStaff } from '../../../utils/guard';
|
|
import { createService, serviceSchema } from '../../../utils/booking';
|
|
import { recordAudit } from '../../../utils/audit';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const admin = await requireStaff(event);
|
|
const parsed = serviceSchema.safeParse(await readBody(event).catch(() => ({})));
|
|
if (!parsed.success) throw createError({ statusCode: 400, statusMessage: 'Invalid service.' });
|
|
try {
|
|
const service = await createService(parsed.data);
|
|
await recordAudit({ actorId: admin.id, action: 'service.created', target: service.id, meta: { slug: service.slug } });
|
|
setResponseStatus(event, 201);
|
|
return { service: { id: service.id, slug: service.slug } };
|
|
} catch (e) {
|
|
if ((e as { code?: string }).code === 'P2002') throw createError({ statusCode: 409, statusMessage: 'That slug is already in use.' });
|
|
throw e;
|
|
}
|
|
});
|