import { Controller, Get, HttpCode, Param, Post, Query, Req } from '@nestjs/common'; import { notificationListQuerySchema, type NotificationListQuery, type NotificationListView, type NotificationView, } from '@dorfteich/shared'; import { AuthedRequest } from '../auth/auth.guard'; import { ZodValidationPipe } from '../common/zod-validation.pipe'; import { AuthenticatedOnly } from '../permissions/permission.decorators'; import { NotificationsService } from './notifications.service'; /** The in-app notification center's API (issue #94). */ @Controller('notifications') export class NotificationsController { constructor(private readonly notifications: NotificationsService) {} @Get() @AuthenticatedOnly() async list( @Query(new ZodValidationPipe(notificationListQuerySchema)) query: NotificationListQuery, @Req() request: AuthedRequest, ): Promise { return this.notifications.list(request.user!, query.page); } @Post(':id/read') @AuthenticatedOnly() async markRead( @Param('id') id: string, @Req() request: AuthedRequest, ): Promise { return this.notifications.markRead(request.user!, id); } @Post('read-all') @HttpCode(204) @AuthenticatedOnly() async markAllRead(@Req() request: AuthedRequest): Promise { await this.notifications.markAllRead(request.user!); } }