diff options
Diffstat (limited to 'src/models/repositories/notification.ts')
| -rw-r--r-- | src/models/repositories/notification.ts | 47 |
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 + } : {}) + }); + } +} |