67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
|
|
import { Injectable, OnModuleInit } from '@nestjs/common';
|
||
|
|
import { generateShortId } from '../../common/utils/id.util';
|
||
|
|
|
||
|
|
export interface Notification {
|
||
|
|
id: string;
|
||
|
|
userId: string;
|
||
|
|
type: string;
|
||
|
|
title: string;
|
||
|
|
body: string;
|
||
|
|
read: boolean;
|
||
|
|
createdAt: Date;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Injectable()
|
||
|
|
export class NotificationsRepository implements OnModuleInit {
|
||
|
|
private notifications: Notification[] = [];
|
||
|
|
|
||
|
|
onModuleInit() {
|
||
|
|
const demos: Partial<Notification>[] = [
|
||
|
|
{ title: '欢迎使用', body: '欢迎来到知习,开始你的学习之旅!', type: 'system' },
|
||
|
|
{ title: '复习提醒', body: '你有 5 张卡片需要复习', type: 'review_due' },
|
||
|
|
];
|
||
|
|
for (const demo of demos) {
|
||
|
|
this.notifications.push({
|
||
|
|
id: generateShortId(),
|
||
|
|
userId: '1',
|
||
|
|
type: demo.type || 'system',
|
||
|
|
title: demo.title || '',
|
||
|
|
body: demo.body || '',
|
||
|
|
read: false,
|
||
|
|
createdAt: new Date(),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async findAll(): Promise<Notification[]> {
|
||
|
|
return [...this.notifications].sort(
|
||
|
|
(a, b) => b.createdAt.getTime() - a.createdAt.getTime(),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
async create(data: Partial<Notification>): Promise<Notification> {
|
||
|
|
const notification: Notification = {
|
||
|
|
id: data.id || generateShortId(),
|
||
|
|
userId: data.userId || 'anonymous',
|
||
|
|
type: data.type || 'system',
|
||
|
|
title: data.title || '',
|
||
|
|
body: data.body || '',
|
||
|
|
read: false,
|
||
|
|
createdAt: new Date(),
|
||
|
|
};
|
||
|
|
this.notifications.push(notification);
|
||
|
|
return notification;
|
||
|
|
}
|
||
|
|
|
||
|
|
async findById(id: string): Promise<Notification | undefined> {
|
||
|
|
return this.notifications.find((n) => n.id === id);
|
||
|
|
}
|
||
|
|
|
||
|
|
async markRead(id: string): Promise<Notification | undefined> {
|
||
|
|
const n = this.notifications.find((x) => x.id === id);
|
||
|
|
if (!n) return undefined;
|
||
|
|
n.read = true;
|
||
|
|
return n;
|
||
|
|
}
|
||
|
|
}
|