summaryrefslogtreecommitdiff
path: root/packages/backend/src/models/NoteSchedule.ts
diff options
context:
space:
mode:
authorMarie <github@yuugi.dev>2024-12-12 12:50:11 +0000
committerMarie <github@yuugi.dev>2024-12-12 12:50:11 +0000
commit8eb9c20df73960baf78834da65349fbfb7014f23 (patch)
treeab8326ede2f2a475069ad7b820c6689401798c79 /packages/backend/src/models/NoteSchedule.ts
parentmerge: fix icons in dev mode (!813) (diff)
parentApply suggestions (diff)
downloadsharkey-8eb9c20df73960baf78834da65349fbfb7014f23.tar.gz
sharkey-8eb9c20df73960baf78834da65349fbfb7014f23.tar.bz2
sharkey-8eb9c20df73960baf78834da65349fbfb7014f23.zip
merge: Schedule Notes (!804)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/804 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Hazelnoot <acomputerdog@gmail.com>
Diffstat (limited to 'packages/backend/src/models/NoteSchedule.ts')
-rw-r--r--packages/backend/src/models/NoteSchedule.ts58
1 files changed, 58 insertions, 0 deletions
diff --git a/packages/backend/src/models/NoteSchedule.ts b/packages/backend/src/models/NoteSchedule.ts
new file mode 100644
index 0000000000..dde0af6ad7
--- /dev/null
+++ b/packages/backend/src/models/NoteSchedule.ts
@@ -0,0 +1,58 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Entity, Index, Column, PrimaryColumn } from 'typeorm';
+import { MiNote } from '@/models/Note.js';
+import { id } from './util/id.js';
+import { MiUser } from './User.js';
+import { MiChannel } from './Channel.js';
+import type { MiDriveFile } from './DriveFile.js';
+
+type MinimumUser = {
+ id: MiUser['id'];
+ host: MiUser['host'];
+ username: MiUser['username'];
+ uri: MiUser['uri'];
+};
+
+export type MiScheduleNoteType={
+ visibility: 'public' | 'home' | 'followers' | 'specified';
+ visibleUsers: MinimumUser[];
+ channel?: MiChannel['id'];
+ poll: {
+ multiple: boolean;
+ choices: string[];
+ /** Date.toISOString() */
+ expiresAt: string | null
+ } | undefined;
+ renote?: MiNote['id'];
+ localOnly: boolean;
+ cw?: string | null;
+ reactionAcceptance: 'likeOnly' | 'likeOnlyForRemote' | 'nonSensitiveOnly' | 'nonSensitiveOnlyForLocalLikeOnlyForRemote' | null;
+ files: MiDriveFile['id'][];
+ text?: string | null;
+ reply?: MiNote['id'];
+ apMentions?: MinimumUser[] | null;
+ apHashtags?: string[] | null;
+ apEmojis?: string[] | null;
+}
+
+@Entity('note_schedule')
+export class MiNoteSchedule {
+ @PrimaryColumn(id())
+ public id: string;
+
+ @Column('jsonb')
+ public note: MiScheduleNoteType;
+
+ @Index()
+ @Column('varchar', {
+ length: 260,
+ })
+ public userId: MiUser['id'];
+
+ @Column('timestamp with time zone')
+ public scheduledAt: Date;
+}