summaryrefslogtreecommitdiff
path: root/src/models/repositories/notification.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/repositories/notification.ts')
-rw-r--r--src/models/repositories/notification.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/models/repositories/notification.ts b/src/models/repositories/notification.ts
new file mode 100644
index 0000000000..9bc569cd3f
--- /dev/null
+++ b/src/models/repositories/notification.ts
@@ -0,0 +1,47 @@
+import { EntityRepository, Repository } from 'typeorm';
+import { Users, Notes } from '..';
+import rap from '@prezzemolo/rap';
+import { Notification } from '../entities/notification';
+
+@EntityRepository(Notification)
+export class NotificationRepository extends Repository<Notification> {
+ public packMany(
+ notifications: any[],
+ ) {
+ return Promise.all(notifications.map(x => this.pack(x)));
+ }
+
+ public async pack(
+ src: Notification['id'] | Notification,
+ ) {
+ const notification = typeof src === 'object' ? src : await this.findOne(src);
+
+ return await rap({
+ id: notification.id,
+ createdAt: notification.createdAt,
+ type: notification.type,
+ userId: notification.notifierId,
+ user: Users.pack(notification.notifier || notification.notifierId),
+ ...(notification.type === 'mention' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ } : {}),
+ ...(notification.type === 'reply' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ } : {}),
+ ...(notification.type === 'renote' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ } : {}),
+ ...(notification.type === 'quote' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ } : {}),
+ ...(notification.type === 'reaction' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ reaction: notification.reaction
+ } : {}),
+ ...(notification.type === 'pollVote' ? {
+ note: Notes.pack(notification.note || notification.noteId),
+ choice: notification.choice
+ } : {})
+ });
+ }
+}