import { Body, Controller, Post, Req, UseGuards } from '@nestjs/common';
import type { z } from 'zod';
import { AuthGuard } from '../../../common/auth/auth.guard';
import { OrganizationContextGuard, type TenantScopedRequest } from '../../../common/auth/organization-context.guard';
import { PermissionGuard } from '../../../common/auth/permission.guard';
import { RequirePermissions } from '../../../common/auth/permissions.decorator';
import { GuestsService } from '../application/guests.service';
import { ZodValidationPipe } from '../../../common/validation/zod-validation.pipe';
import { guestCreateSchema,guestDietarySchema } from '../../../common/validation/critical-write.schemas';
type GuestCreateBody = z.infer<typeof guestCreateSchema>;
type GuestDietaryBody = z.infer<typeof guestDietarySchema>;
@Controller('/guests')
@UseGuards(AuthGuard, OrganizationContextGuard, PermissionGuard)
export class GuestsController {
constructor(private readonly guests: GuestsService) {}
@Post()
@RequirePermissions('guests.manage')
create(@Req() req: TenantScopedRequest, @Body(new ZodValidationPipe(guestCreateSchema)) body:GuestCreateBody) {
return this.guests.create({
organizationId: req.organizationId!,
...body,
});
}
@Post('/dietary-notes')
@RequirePermissions('guests.manage')
dietary(@Req() req: TenantScopedRequest, @Body(new ZodValidationPipe(guestDietarySchema)) body:GuestDietaryBody) {
return this.guests.addDietaryNote({
organizationId: req.organizationId!,
guestId: body.guestId,
note: body.note,
userId: req.auth?.userId,
});
}
}
