un seen count

This commit is contained in:
2025-12-21 14:54:33 +03:30
parent 7a92b6a01a
commit a605e2a5e6
2 changed files with 40 additions and 1 deletions
@@ -47,6 +47,16 @@ export class NotificationsController {
);
}
@UseGuards(AuthGuard)
@ApiBearerAuth()
@Get('public/notifications/unseen-count')
@ApiOperation({ summary: 'Get unseen notifications count for user' })
@ApiHeader(API_HEADER_SLUG)
async getUserUnseenCount(@UserId() userId: string, @RestId() restaurantId: string) {
const count = await this.notificationService.countUnseenByUserAndRestaurant(userId, restaurantId);
return { count };
}
@UseGuards(AuthGuard)
@ApiBearerAuth()
@Put('public/notifications/:id')
@@ -79,7 +89,16 @@ export class NotificationsController {
@Query('status') status?: 'seen' | 'unseen',
) {
const parsedLimit = limit ? parseInt(limit.toString(), 10) : 50;
return await this.notificationService.findByRestaurant(restaurantId, parsedLimit, cursor, status);
return await this.notificationService.findByRestaurant(restaurantId, adminId, parsedLimit, cursor, status);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@Get('admin/notifications/unseen-count')
@ApiOperation({ summary: 'Get unseen notifications count for admin' })
async getAdminUnseenCount(@AdminId() adminId: string, @RestId() restaurantId: string) {
const count = await this.notificationService.countUnseenByRestaurant(adminId, restaurantId);
return { count };
}
@UseGuards(AdminAuthGuard)
@@ -98,12 +98,14 @@ export class NotificationService {
async findByRestaurant(
restaurantId: string,
adminId: string,
limit = 50,
cursor?: string,
status?: 'seen' | 'unseen',
): Promise<{ data: Notification[]; nextCursor: string | null }> {
const where: FilterQuery<Notification> = {
restaurant: { id: restaurantId },
admin: { id: adminId },
};
// Filter by status (seen/unseen)
@@ -224,4 +226,22 @@ export class NotificationService {
},
);
}
async countUnseenByUserAndRestaurant(userId: string, restaurantId: string): Promise<number> {
const where: FilterQuery<Notification> = {
user: { id: userId },
restaurant: { id: restaurantId },
seenAt: null,
};
return this.em.count(Notification, where);
}
async countUnseenByRestaurant(adminId: string, restaurantId: string): Promise<number> {
const where: FilterQuery<Notification> = {
admin: { id: adminId },
restaurant: { id: restaurantId },
seenAt: null,
};
return this.em.count(Notification, where);
}
}