21 lines
1 KiB
TypeScript
21 lines
1 KiB
TypeScript
import { requireStaff } from '../../../utils/guard';
|
|
import { serviceSchema, updateService } from '../../../utils/booking';
|
|
import { recordAudit } from '../../../utils/audit';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const admin = await requireStaff(event);
|
|
const id = getRouterParam(event, 'id') ?? '';
|
|
const parsed = serviceSchema.safeParse(await readBody(event).catch(() => ({})));
|
|
if (!parsed.success) throw createError({ statusCode: 400, statusMessage: 'Invalid service.' });
|
|
try {
|
|
const service = await updateService(id, parsed.data);
|
|
await recordAudit({ actorId: admin.id, action: 'service.updated', target: id, meta: { slug: service.slug } });
|
|
return { service: { id: service.id, slug: service.slug } };
|
|
} catch (e) {
|
|
const code = (e as { code?: string }).code;
|
|
if (code === 'P2002') throw createError({ statusCode: 409, statusMessage: 'That slug is already in use.' });
|
|
if (code === 'P2025') throw createError({ statusCode: 404, statusMessage: 'Service not found.' });
|
|
throw e;
|
|
}
|
|
});
|