summaryrefslogtreecommitdiff
path: root/src/models/entities/notification.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/entities/notification.ts')
-rw-r--r--src/models/entities/notification.ts94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/models/entities/notification.ts b/src/models/entities/notification.ts
new file mode 100644
index 0000000000..627a57bece
--- /dev/null
+++ b/src/models/entities/notification.ts
@@ -0,0 +1,94 @@
+import { Entity, Index, JoinColumn, ManyToOne, Column, PrimaryColumn } from 'typeorm';
+import { User } from './user';
+import { id } from '../id';
+import { Note } from './note';
+
+@Entity()
+export class Notification {
+ @PrimaryColumn(id())
+ public id: string;
+
+ @Index()
+ @Column('timestamp with time zone', {
+ comment: 'The created date of the Notification.'
+ })
+ public createdAt: Date;
+
+ /**
+ * 通知の受信者
+ */
+ @Index()
+ @Column({
+ ...id(),
+ comment: 'The ID of recipient user of the Notification.'
+ })
+ public notifieeId: User['id'];
+
+ @ManyToOne(type => User, {
+ onDelete: 'CASCADE'
+ })
+ @JoinColumn()
+ public notifiee: User | null;
+
+ /**
+ * 通知の送信者(initiator)
+ */
+ @Column({
+ ...id(),
+ comment: 'The ID of sender user of the Notification.'
+ })
+ public notifierId: User['id'];
+
+ @ManyToOne(type => User, {
+ onDelete: 'CASCADE'
+ })
+ @JoinColumn()
+ public notifier: User | null;
+
+ /**
+ * 通知の種類。
+ * follow - フォローされた
+ * mention - 投稿で自分が言及された
+ * reply - (自分または自分がWatchしている)投稿が返信された
+ * renote - (自分または自分がWatchしている)投稿がRenoteされた
+ * quote - (自分または自分がWatchしている)投稿が引用Renoteされた
+ * reaction - (自分または自分がWatchしている)投稿にリアクションされた
+ * pollVote - (自分または自分がWatchしている)投稿の投票に投票された
+ */
+ @Column('varchar', {
+ length: 32,
+ comment: 'The type of the Notification.'
+ })
+ public type: string;
+
+ /**
+ * 通知が読まれたかどうか
+ */
+ @Column('boolean', {
+ default: false,
+ comment: 'Whether the Notification is read.'
+ })
+ public isRead: boolean;
+
+ @Column({
+ ...id(),
+ nullable: true
+ })
+ public noteId: Note['id'] | null;
+
+ @ManyToOne(type => Note, {
+ onDelete: 'CASCADE'
+ })
+ @JoinColumn()
+ public note: Note | null;
+
+ @Column('varchar', {
+ length: 128, nullable: true
+ })
+ public reaction: string;
+
+ @Column('integer', {
+ nullable: true
+ })
+ public choice: number;
+}