summaryrefslogtreecommitdiff
path: root/packages/backend/src/models/entities/Instance.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/models/entities/Instance.ts')
-rw-r--r--packages/backend/src/models/entities/Instance.ts164
1 files changed, 164 insertions, 0 deletions
diff --git a/packages/backend/src/models/entities/Instance.ts b/packages/backend/src/models/entities/Instance.ts
new file mode 100644
index 0000000000..7ea9234384
--- /dev/null
+++ b/packages/backend/src/models/entities/Instance.ts
@@ -0,0 +1,164 @@
+import { Entity, PrimaryColumn, Index, Column } from 'typeorm';
+import { id } from '../id.js';
+
+@Entity()
+export class Instance {
+ @PrimaryColumn(id())
+ public id: string;
+
+ /**
+ * このインスタンスを捕捉した日時
+ */
+ @Index()
+ @Column('timestamp with time zone', {
+ comment: 'The caught date of the Instance.',
+ })
+ public caughtAt: Date;
+
+ /**
+ * ホスト
+ */
+ @Index({ unique: true })
+ @Column('varchar', {
+ length: 128,
+ comment: 'The host of the Instance.',
+ })
+ public host: string;
+
+ /**
+ * インスタンスのユーザー数
+ */
+ @Column('integer', {
+ default: 0,
+ comment: 'The count of the users of the Instance.',
+ })
+ public usersCount: number;
+
+ /**
+ * インスタンスの投稿数
+ */
+ @Column('integer', {
+ default: 0,
+ comment: 'The count of the notes of the Instance.',
+ })
+ public notesCount: number;
+
+ /**
+ * このインスタンスのユーザーからフォローされている、自インスタンスのユーザーの数
+ */
+ @Column('integer', {
+ default: 0,
+ })
+ public followingCount: number;
+
+ /**
+ * このインスタンスのユーザーをフォローしている、自インスタンスのユーザーの数
+ */
+ @Column('integer', {
+ default: 0,
+ })
+ public followersCount: number;
+
+ /**
+ * 直近のリクエスト送信日時
+ */
+ @Column('timestamp with time zone', {
+ nullable: true,
+ })
+ public latestRequestSentAt: Date | null;
+
+ /**
+ * 直近のリクエスト送信時のHTTPステータスコード
+ */
+ @Column('integer', {
+ nullable: true,
+ })
+ public latestStatus: number | null;
+
+ /**
+ * 直近のリクエスト受信日時
+ */
+ @Column('timestamp with time zone', {
+ nullable: true,
+ })
+ public latestRequestReceivedAt: Date | null;
+
+ /**
+ * このインスタンスと最後にやり取りした日時
+ */
+ @Column('timestamp with time zone')
+ public lastCommunicatedAt: Date;
+
+ /**
+ * このインスタンスと不通かどうか
+ */
+ @Column('boolean', {
+ default: false,
+ })
+ public isNotResponding: boolean;
+
+ /**
+ * このインスタンスへの配信を停止するか
+ */
+ @Index()
+ @Column('boolean', {
+ default: false,
+ })
+ public isSuspended: boolean;
+
+ @Column('varchar', {
+ length: 64, nullable: true,
+ comment: 'The software of the Instance.',
+ })
+ public softwareName: string | null;
+
+ @Column('varchar', {
+ length: 64, nullable: true,
+ })
+ public softwareVersion: string | null;
+
+ @Column('boolean', {
+ nullable: true,
+ })
+ public openRegistrations: boolean | null;
+
+ @Column('varchar', {
+ length: 256, nullable: true,
+ })
+ public name: string | null;
+
+ @Column('varchar', {
+ length: 4096, nullable: true,
+ })
+ public description: string | null;
+
+ @Column('varchar', {
+ length: 128, nullable: true,
+ })
+ public maintainerName: string | null;
+
+ @Column('varchar', {
+ length: 256, nullable: true,
+ })
+ public maintainerEmail: string | null;
+
+ @Column('varchar', {
+ length: 256, nullable: true,
+ })
+ public iconUrl: string | null;
+
+ @Column('varchar', {
+ length: 256, nullable: true,
+ })
+ public faviconUrl: string | null;
+
+ @Column('varchar', {
+ length: 64, nullable: true,
+ })
+ public themeColor: string | null;
+
+ @Column('timestamp with time zone', {
+ nullable: true,
+ })
+ public infoUpdatedAt: Date | null;
+}