import { Body,Controller,Get,Param,Post,Put,Req,UseGuards } from '@nestjs/common';
import type { z } from 'zod';
import { AuthGuard } from '../../../common/auth/auth.guard';
import { OrganizationContextGuard } from '../../../common/auth/organization-context.guard';
import { LocationContextGuard,type LocationScopedRequest } from '../../../common/auth/location-context.guard';
import { PermissionGuard } from '../../../common/auth/permission.guard';
import { NotificationService } from '../application/notification.service';
import { ZodValidationPipe } from '../../../common/validation/zod-validation.pipe';
import { notificationPreferenceSchema } from '../../../common/validation/critical-write.schemas';
type NotificationPreferenceBody = z.infer<typeof notificationPreferenceSchema>;
@Controller()
@UseGuards(AuthGuard,OrganizationContextGuard,LocationContextGuard,PermissionGuard)
export class NotificationsController {
constructor(private readonly notifications:NotificationService) {}
@Get('/notifications')
list(@Req() req:LocationScopedRequest) {
return this.notifications.list({
organizationId:req.organizationId!,userId:req.auth!.userId,locationId:req.locationId!,
});
}
@Post('/notifications/:id/read')
read(@Req() req:LocationScopedRequest,@Param('id') id:string) {
return this.notifications.read({
organizationId:req.organizationId!,userId:req.auth!.userId,id,locationId:req.locationId!,
});
}
@Post('/notifications/read-all')
readAll(@Req() req:LocationScopedRequest) {
return this.notifications.readAll({
organizationId:req.organizationId!,userId:req.auth!.userId,locationId:req.locationId!,
});
}
@Get('/notification-preferences')
prefs(@Req() req:LocationScopedRequest) {
return this.notifications.preferences({
organizationId:req.organizationId!,userId:req.auth!.userId,
});
}
@Put('/notification-preferences')
put(@Req() req:LocationScopedRequest,@Body(new ZodValidationPipe(notificationPreferenceSchema)) body:NotificationPreferenceBody) {
return this.notifications.putPreference({
organizationId:req.organizationId!,userId:req.auth!.userId,...body,
});
}
}
