80 lines
1.8 KiB
TypeScript
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,
|
|
},
|
|
}),
|
|
};
|
|
}
|
|
}
|