postiz/libraries/nestjs-libraries/src/database/prisma/notifications/notifications.repository.ts

80 lines
1.8 KiB
TypeScript

import { PrismaRepository } from '@gitroom/nestjs-libraries/database/prisma/prisma.service';
import { Injectable } from '@nestjs/common';
@Injectable()
export class NotificationsRepository {
constructor(
private _notifications: PrismaRepository<'notifications'>,
private _user: PrismaRepository<'user'>
) {}
getLastReadNotification(userId: string) {
return this._user.model.user.findFirst({
where: {
id: userId,
},
select: {
lastReadNotifications: true,
},
});
}
async getMainPageCount(organizationId: string, userId: string) {
const { lastReadNotifications } = (await this.getLastReadNotification(
userId
))!;
return {
total: await this._notifications.model.notifications.count({
where: {
organizationId,
createdAt: {
gt: lastReadNotifications!,
},
},
}),
};
}
async createNotification(organizationId: string, content: string) {
await this._notifications.model.notifications.create({
data: {
organizationId,
content,
},
});
}
async getNotifications(organizationId: string, userId: string) {
const { lastReadNotifications } = (await this.getLastReadNotification(
userId
))!;
await this._user.model.user.update({
where: {
id: userId,
},
data: {
lastReadNotifications: new Date(),
},
});
return {
lastReadNotifications,
notifications: await this._notifications.model.notifications.findMany({
orderBy: {
createdAt: 'desc',
},
take: 10,
where: {
organizationId,
},
select: {
createdAt: true,
content: true,
},
}),
};
}
}