From e391196eb225bfa35bea7cff3de3ff1a244fbba7 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sun, 7 Jan 2024 18:22:38 +0100 Subject: [PATCH] Initial migration --- .../Core/Database/DatabaseContext.cs | 437 +- .../20240107171910_Initial.Designer.cs | 6139 +++++++++++++++++ .../Migrations/20240107171910_Initial.cs | 3487 ++++++++++ .../DatabaseContextModelSnapshot.cs | 6136 ++++++++++++++++ .../Core/Database/Tables/ChartActiveUser.cs | 56 - .../Core/Database/Tables/ChartApRequest.cs | 20 - .../Database/Tables/ChartDayActiveUser.cs | 56 - .../Core/Database/Tables/ChartDayApRequest.cs | 20 - .../Core/Database/Tables/ChartDayDrive.cs | 30 - .../Database/Tables/ChartDayFederation.cs | 39 - .../Core/Database/Tables/ChartDayHashtag.cs | 26 - .../Core/Database/Tables/ChartDayInstance.cs | 64 - .../Core/Database/Tables/ChartDayNetwork.cs | 24 - .../Core/Database/Tables/ChartDayNote.cs | 42 - .../Database/Tables/ChartDayPerUserDrive.cs | 28 - .../Tables/ChartDayPerUserFollowing.cs | 40 - .../Database/Tables/ChartDayPerUserNote.cs | 30 - .../Tables/ChartDayPerUserReaction.cs | 20 - .../Core/Database/Tables/ChartDayUser.cs | 26 - .../Core/Database/Tables/ChartDrive.cs | 30 - .../Core/Database/Tables/ChartFederation.cs | 39 - .../Core/Database/Tables/ChartHashtag.cs | 26 - .../Core/Database/Tables/ChartInstance.cs | 64 - .../Core/Database/Tables/ChartNetwork.cs | 24 - .../Core/Database/Tables/ChartNote.cs | 42 - .../Core/Database/Tables/ChartPerUserDrive.cs | 28 - .../Database/Tables/ChartPerUserFollowing.cs | 40 - .../Core/Database/Tables/ChartPerUserNote.cs | 30 - .../Database/Tables/ChartPerUserReaction.cs | 20 - .../Core/Database/Tables/ChartTest.cs | 21 - .../Core/Database/Tables/ChartTestGrouped.cs | 21 - .../Core/Database/Tables/ChartTestUnique.cs | 18 - .../Core/Database/Tables/ChartUser.cs | 26 - .../Core/Database/Tables/LegacyMigrations.cs | 14 - .../Core/Database/Tables/UserIp.cs | 18 - .../Core/Database/Tables/UserProfile.cs | 2 +- Iceshrimp.Backend/migrate.sql | 77 + 37 files changed, 15846 insertions(+), 1414 deletions(-) create mode 100644 Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.Designer.cs create mode 100644 Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.cs create mode 100644 Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartActiveUser.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartApRequest.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayActiveUser.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayApRequest.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayDrive.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayFederation.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayHashtag.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayInstance.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayNetwork.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayNote.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserDrive.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserFollowing.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserNote.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserReaction.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDayUser.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartDrive.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartFederation.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartHashtag.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartInstance.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartNetwork.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartNote.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartPerUserDrive.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartPerUserFollowing.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartPerUserNote.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartPerUserReaction.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartTest.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartTestGrouped.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartTestUnique.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/ChartUser.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/LegacyMigrations.cs delete mode 100644 Iceshrimp.Backend/Core/Database/Tables/UserIp.cs create mode 100644 Iceshrimp.Backend/migrate.sql diff --git a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs index 422df327..414b6597 100644 --- a/Iceshrimp.Backend/Core/Database/DatabaseContext.cs +++ b/Iceshrimp.Backend/Core/Database/DatabaseContext.cs @@ -29,35 +29,6 @@ public class DatabaseContext : DbContext { public virtual DbSet Channels { get; init; } = null!; public virtual DbSet ChannelFollowings { get; init; } = null!; public virtual DbSet ChannelNotePinings { get; init; } = null!; - public virtual DbSet ChartActiveUsers { get; init; } = null!; - public virtual DbSet ChartApRequests { get; init; } = null!; - public virtual DbSet ChartDayActiveUsers { get; init; } = null!; - public virtual DbSet ChartDayApRequests { get; init; } = null!; - public virtual DbSet ChartDayDrives { get; init; } = null!; - public virtual DbSet ChartDayFederations { get; init; } = null!; - public virtual DbSet ChartDayHashtags { get; init; } = null!; - public virtual DbSet ChartDayInstances { get; init; } = null!; - public virtual DbSet ChartDayNetworks { get; init; } = null!; - public virtual DbSet ChartDayNotes { get; init; } = null!; - public virtual DbSet ChartDayPerUserDrives { get; init; } = null!; - public virtual DbSet ChartDayPerUserFollowings { get; init; } = null!; - public virtual DbSet ChartDayPerUserNotes { get; init; } = null!; - public virtual DbSet ChartDayPerUserReactions { get; init; } = null!; - public virtual DbSet ChartDayUsers { get; init; } = null!; - public virtual DbSet ChartDrives { get; init; } = null!; - public virtual DbSet ChartFederations { get; init; } = null!; - public virtual DbSet ChartHashtags { get; init; } = null!; - public virtual DbSet ChartInstances { get; init; } = null!; - public virtual DbSet ChartNetworks { get; init; } = null!; - public virtual DbSet ChartNotes { get; init; } = null!; - public virtual DbSet ChartPerUserDrives { get; init; } = null!; - public virtual DbSet ChartPerUserFollowings { get; init; } = null!; - public virtual DbSet ChartPerUserNotes { get; init; } = null!; - public virtual DbSet ChartPerUserReactions { get; init; } = null!; - public virtual DbSet ChartTests { get; init; } = null!; - public virtual DbSet ChartTestGroupeds { get; init; } = null!; - public virtual DbSet ChartTestUniques { get; init; } = null!; - public virtual DbSet ChartUsers { get; init; } = null!; public virtual DbSet Clips { get; init; } = null!; public virtual DbSet ClipNotes { get; init; } = null!; public virtual DbSet DriveFiles { get; init; } = null!; @@ -73,7 +44,6 @@ public class DatabaseContext : DbContext { public virtual DbSet Instances { get; init; } = null!; public virtual DbSet MessagingMessages { get; init; } = null!; public virtual DbSet Meta { get; init; } = null!; - public virtual DbSet Migrations { get; init; } = null!; public virtual DbSet ModerationLogs { get; init; } = null!; public virtual DbSet Mutings { get; init; } = null!; public virtual DbSet Notes { get; init; } = null!; @@ -106,7 +76,6 @@ public class DatabaseContext : DbContext { public virtual DbSet UserGroupInvitations { get; init; } = null!; public virtual DbSet UserGroupInvites { get; init; } = null!; public virtual DbSet UserGroupJoinings { get; init; } = null!; - public virtual DbSet UserIps { get; init; } = null!; public virtual DbSet UserKeypairs { get; init; } = null!; public virtual DbSet UserLists { get; init; } = null!; public virtual DbSet UserListJoinings { get; init; } = null!; @@ -338,400 +307,6 @@ public class DatabaseContext : DbContext { .HasConstraintName("FK_10b19ef67d297ea9de325cd4502"); }); - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_317237a9f733b970604a11e314f"); - - entity.Property(e => e.Read).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.ReadWrite).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideMonth).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideWeek).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideYear).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinMonth).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinWeek).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinYear).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.UniqueTempRead).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideMonth).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideWeek).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideYear).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinMonth).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinWeek).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinYear).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempWrite).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.Write).HasDefaultValueSql("'0'::smallint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_56a25cd447c7ee08876b3baf8d8"); - - entity.Property(e => e.DeliverFailed).HasDefaultValue(0); - entity.Property(e => e.DeliverSucceeded).HasDefaultValue(0); - entity.Property(e => e.InboxReceived).HasDefaultValue(0); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_b1790489b14f005ae8f404f5795"); - - entity.Property(e => e.Read).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.ReadWrite).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideMonth).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideWeek).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredOutsideYear).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinMonth).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinWeek).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.RegisteredWithinYear).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.UniqueTempRead).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideMonth).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideWeek).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredOutsideYear).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinMonth).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinWeek).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRegisteredWithinYear).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempWrite).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.Write).HasDefaultValueSql("'0'::smallint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_9318b49daee320194e23f712e69"); - - entity.Property(e => e.DeliverFailed).HasDefaultValue(0); - entity.Property(e => e.DeliverSucceeded).HasDefaultValue(0); - entity.Property(e => e.InboxReceived).HasDefaultValue(0); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_e7ec0de057c77c40fc8d8b62151"); - - entity.Property(e => e.LocalDecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalIncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalIncSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteIncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteIncSize).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_7ca721c769f31698e0e1331e8e6"); - - entity.Property(e => e.DeliveredInstances).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.InboxInstances).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Pub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.PubActive).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Pubsub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Stalled).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Sub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.SubActive).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.UniqueTempDeliveredInstances).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempInboxInstances).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempStalled).HasDefaultValueSql("'{}'::character varying[]"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_13d5a3b089344e5557f8e0980b4"); - - entity.Property(e => e.LocalUsers).HasDefaultValue(0); - entity.Property(e => e.RemoteUsers).HasDefaultValue(0); - entity.Property(e => e.UniqueTempLocalUsers).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRemoteUsers).HasDefaultValueSql("'{}'::character varying[]"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_479a8ff9d959274981087043023"); - - entity.Property(e => e.DriveDecFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveDecUsage).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveIncFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveIncUsage).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveTotalFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.NotesInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsFailed).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsReceived).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsSucceeded).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_cac499d6f471042dfed1e7e0132"); - - entity.Property(e => e.IncomingBytes).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncomingRequests).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.OutgoingBytes).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.OutgoingRequests).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalTime).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_1fa4139e1f338272b758d05e090"); - - entity.Property(e => e.LocalDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.LocalInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.RemoteInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_1ae135254c137011645da7f4045"); - - entity.Property(e => e.DecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalSize).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_68ce6b67da57166da66fc8fb27e"); - - entity.Property(e => e.LocalFollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_58bab6b6d3ad9310cbc7460fd28"); - - entity.Property(e => e.Dec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsWithFile).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Inc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.Total).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_8af24e2d51ff781a354fe595eda"); - - entity.Property(e => e.LocalCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteCount).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_d7f7185abb9851f70c4726c54bd"); - - entity.Property(e => e.LocalDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_f96bc548a765cd4b3b354221ce7"); - - entity.Property(e => e.LocalDecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalIncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalIncSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteIncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteIncSize).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_b39dcd31a0fe1a7757e348e85fd"); - - entity.Property(e => e.DeliveredInstances).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.InboxInstances).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Pub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.PubActive).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Pubsub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Stalled).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Sub).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.SubActive).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.UniqueTempDeliveredInstances).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempInboxInstances).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempStalled).HasDefaultValueSql("'{}'::character varying[]"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_c32f1ea2b44a5d2f7881e37f8f9"); - - entity.Property(e => e.LocalUsers).HasDefaultValue(0); - entity.Property(e => e.RemoteUsers).HasDefaultValue(0); - entity.Property(e => e.UniqueTempLocalUsers).HasDefaultValueSql("'{}'::character varying[]"); - entity.Property(e => e.UniqueTempRemoteUsers).HasDefaultValueSql("'{}'::character varying[]"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_1267c67c7c2d47b4903975f2c00"); - - entity.Property(e => e.DriveDecFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveDecUsage).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveIncFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveIncUsage).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DriveTotalFiles).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.FollowingTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.NotesInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.NotesTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsFailed).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsReceived).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RequestsSucceeded).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.UsersTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_bc4290c2e27fad14ef0c1ca93f3"); - - entity.Property(e => e.IncomingBytes).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncomingRequests).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.OutgoingBytes).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.OutgoingRequests).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalTime).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_0aec823fa85c7f901bdb3863b14"); - - entity.Property(e => e.LocalDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.LocalInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDiffsWithFile).HasDefaultValue(0); - entity.Property(e => e.RemoteInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_d0ef23d24d666e1a44a0cd3d208"); - - entity.Property(e => e.DecCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DecSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.IncSize).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.TotalSize).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_85bb1b540363a29c2fec83bd907"); - - entity.Property(e => e.LocalFollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalFollowingsTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowersTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteFollowingsTotal).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_334acf6e915af2f29edc11b8e50"); - - entity.Property(e => e.Dec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsNormal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsRenote).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsReply).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.DiffsWithFile).HasDefaultValueSql("'0'::smallint"); - entity.Property(e => e.Inc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.Total).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_984f54dae441e65b633e8d27a7f"); - - entity.Property(e => e.LocalCount).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteCount).HasDefaultValueSql("'0'::bigint"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_b4bc31dffbd1b785276a3ecfc1e"); - - entity.HasIndex(e => e.Date, "IDX_dab383a36f3c9db4a0c9b02cf3") - .IsUnique() - .HasFilter("(\"group\" IS NULL)"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_f4a2b175d308695af30d4293272"); - - entity.HasIndex(e => e.Date, "IDX_da522b4008a9f5d7743b87ad55") - .IsUnique() - .HasFilter("(\"group\" IS NULL)"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_409bac9c97cc612d8500012319d"); - - entity.HasIndex(e => e.Date, "IDX_16effb2e888f6763673b579f80") - .IsUnique() - .HasFilter("(\"group\" IS NULL)"); - - entity.Property(e => e.Foo).HasDefaultValueSql("'{}'::character varying[]"); - }); - - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_4dfcf2c78d03524b9eb2c99d328"); - - entity.Property(e => e.LocalDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.LocalTotal).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteDec).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteInc).HasDefaultValueSql("'0'::bigint"); - entity.Property(e => e.RemoteTotal).HasDefaultValueSql("'0'::bigint"); - }); - modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK_f0685dac8d4dd056d7255670b75"); @@ -1016,10 +591,6 @@ public class DatabaseContext : DbContext { entity.Property(e => e.UseObjectStorage).HasDefaultValue(false); }); - modelBuilder.Entity(entity => { - entity.HasKey(e => e.Id).HasName("PK_8c82d7f526340ab734260ea46be"); - }); - modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK_d0adca6ecfd068db83e4526cc26"); @@ -1175,6 +746,7 @@ public class DatabaseContext : DbContext { .HasComment("Whether the notification was read."); entity.Property(e => e.NotifieeId).HasComment("The ID of recipient user of the Notification."); entity.Property(e => e.NotifierId).HasComment("The ID of sender user of the Notification."); + entity.Property(e => e.Type).HasComment("The type of the Notification."); entity.HasOne(d => d.AppAccessToken).WithMany(p => p.Notifications) .OnDelete(DeleteBehavior.Cascade) @@ -1268,6 +840,7 @@ public class DatabaseContext : DbContext { entity.Property(e => e.Choices).HasDefaultValueSql("'{}'::character varying[]"); entity.Property(e => e.UserHost).HasComment("[Denormalized]"); entity.Property(e => e.UserId).HasComment("[Denormalized]"); + entity.Property(e => e.NoteVisibility).HasComment("[Denormalized]"); entity.HasOne(d => d.Note).WithOne(p => p.Poll).HasConstraintName("FK_da851e06d0dfe2ef397d8b1bf1b"); }); @@ -1500,8 +1073,6 @@ public class DatabaseContext : DbContext { .HasConstraintName("FK_f3a1b4bd0c7cabba958a0c0b231"); }); - modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK_2c44ddfbf7c0464d028dcef325e"); }); - modelBuilder.Entity(entity => { entity.HasKey(e => e.UserId).HasName("PK_f4853eb41ab722fe05f81cedeb6"); @@ -1595,6 +1166,10 @@ public class DatabaseContext : DbContext { entity.Property(e => e.Url).HasComment("Remote URL of the user."); entity.Property(e => e.UsePasswordLessLogin).HasDefaultValue(false); entity.Property(e => e.UserHost).HasComment("[Denormalized]"); + entity.Property(e => e.MutingNotificationTypes) + .HasDefaultValueSql("'{}'::public.user_profile_mutingnotificationtypes_enum[]"); + entity.Property(e => e.FFVisibility) + .HasDefaultValue(UserProfile.UserProfileFFVisibility.Public); entity.HasOne(d => d.PinnedPage).WithOne(p => p.UserProfile) .OnDelete(DeleteBehavior.SetNull) diff --git a/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.Designer.cs b/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.Designer.cs new file mode 100644 index 00000000..74223ab3 --- /dev/null +++ b/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.Designer.cs @@ -0,0 +1,6139 @@ +// +using System; +using System.Collections.Generic; +using Iceshrimp.Backend.Core.Database; +using Iceshrimp.Backend.Core.Database.Tables; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Iceshrimp.Backend.Core.Database.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20240107171910_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "antenna_src_enum", new[] { "home", "all", "users", "list", "group", "instances" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "log_level_enum", new[] { "error", "warning", "info", "success", "debug" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "note_visibility_enum", new[] { "public", "home", "followers", "specified", "hidden" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "notification_type_enum", new[] { "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "page_visibility_enum", new[] { "public", "followers", "specified" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "poll_notevisibility_enum", new[] { "public", "home", "followers", "specified", "hidden" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "relay_status_enum", new[] { "requesting", "accepted", "rejected" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "user_profile_ffvisibility_enum", new[] { "public", "followers", "private" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "user_profile_mutingnotificationtypes_enum", new[] { "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" }); + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "pg_trgm"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AbuseUserReport", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AssigneeId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("assigneeId"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("comment"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AbuseUserReport."); + + b.Property("Forwarded") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("forwarded"); + + b.Property("ReporterHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("reporterHost") + .HasComment("[Denormalized]"); + + b.Property("ReporterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("reporterId"); + + b.Property("Resolved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("resolved"); + + b.Property("TargetUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("targetUserHost") + .HasComment("[Denormalized]"); + + b.Property("TargetUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("targetUserId"); + + b.HasKey("Id") + .HasName("PK_87873f5f5cc5c321a1306b2d18c"); + + b.HasIndex("AssigneeId"); + + b.HasIndex(new[] { "ReporterId" }, "IDX_04cc96756f89d0b7f9473e8cdf"); + + b.HasIndex(new[] { "Resolved" }, "IDX_2b15aaf4a0dc5be3499af7ab6a"); + + b.HasIndex(new[] { "TargetUserHost" }, "IDX_4ebbf7f93cdc10e8d1ef2fc6cd"); + + b.HasIndex(new[] { "TargetUserId" }, "IDX_a9021cc2e1feb5f72d3db6e9f5"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_db2098070b2b5a523c58181f74"); + + b.HasIndex(new[] { "ReporterHost" }, "IDX_f8d8b93740ad12c4ce8213a199"); + + b.ToTable("abuse_user_report"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AccessToken."); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("description"); + + b.Property("Fetched") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("fetched"); + + b.Property("Hash") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("hash"); + + b.Property("IconUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("iconUrl"); + + b.Property("LastUsedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastUsedAt"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property>("Permission") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(64)[]") + .HasColumnName("permission") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Session") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("session"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_f20f028607b2603deabd8182d12"); + + b.HasIndex("AppId"); + + b.HasIndex(new[] { "Hash" }, "IDX_64c327441248bae40f7d92f34f"); + + b.HasIndex(new[] { "Token" }, "IDX_70ba8f6af34bc924fc9e12adb8"); + + b.HasIndex(new[] { "UserId" }, "IDX_9949557d0e1b2c19e5344c171e"); + + b.HasIndex(new[] { "Session" }, "IDX_bf3a053c07d9fb5d87317c56ee"); + + b.ToTable("access_token"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Announcement", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Announcement."); + + b.Property("ImageUrl") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("imageUrl"); + + b.Property("IsGoodNews") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isGoodNews"); + + b.Property("ShowPopup") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("showPopup"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("text"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Announcement."); + + b.HasKey("Id") + .HasName("PK_e0ef0550174fd1099a308fd18a0"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_118ec703e596086fc4515acb39"); + + b.ToTable("announcement"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AnnouncementRead", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AnnouncementId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("announcementId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AnnouncementRead."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_4b90ad1f42681d97b2683890c5e"); + + b.HasIndex(new[] { "AnnouncementId" }, "IDX_603a7b1e7aa0533c6c88e9bfaf"); + + b.HasIndex(new[] { "UserId" }, "IDX_8288151386172b8109f7239ab2"); + + b.HasIndex(new[] { "UserId", "AnnouncementId" }, "IDX_924fa71815cfa3941d003702a0") + .IsUnique(); + + b.ToTable("announcement_read"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Antenna", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CaseSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("caseSensitive"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Antenna."); + + b.Property("ExcludeKeywords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("excludeKeywords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Expression") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("expression"); + + b.Property("Instances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("instances") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Keywords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("keywords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Antenna."); + + b.Property("Notify") + .HasColumnType("boolean") + .HasColumnName("notify"); + + b.Property("Source") + .HasColumnType("antenna_src_enum") + .HasColumnName("src"); + + b.Property("UserGroupJoiningId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupJoiningId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("UserListId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userListId"); + + b.Property>("Users") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(1024)[]") + .HasColumnName("users") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("WithFile") + .HasColumnType("boolean") + .HasColumnName("withFile"); + + b.Property("WithReplies") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("withReplies"); + + b.HasKey("Id") + .HasName("PK_c170b99775e1dccca947c9f2d5f"); + + b.HasIndex("UserGroupJoiningId"); + + b.HasIndex("UserListId"); + + b.HasIndex(new[] { "UserId" }, "IDX_6446c571a0e8d0f05f01c78909"); + + b.ToTable("antenna"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CallbackUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("callbackUrl") + .HasComment("The callbackUrl of the App."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the App."); + + b.Property("Description") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("description") + .HasComment("The description of the App."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the App."); + + b.Property>("Permission") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("permission") + .HasComment("The permission of the App."); + + b.Property("Secret") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("secret") + .HasComment("The secret key of the App."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_9478629fc093d229df09e560aea"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_048a757923ed8b157e9895da53"); + + b.HasIndex(new[] { "UserId" }, "IDX_3f5b0899ef90527a3462d7c2cb"); + + b.HasIndex(new[] { "Secret" }, "IDX_f49922d511d666848f250663c4"); + + b.ToTable("app"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AttestationChallenge", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("Challenge") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("challenge") + .HasComment("Hex-encoded sha256 hash of the challenge."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The date challenge was created for expiry purposes."); + + b.Property("RegistrationChallenge") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("registrationChallenge") + .HasComment("Indicates that the challenge is only for registration purposes if true to prevent the challenge for being used as authentication."); + + b.HasKey("Id", "UserId") + .HasName("PK_d0ba6786e093f1bcb497572a6b5"); + + b.HasIndex(new[] { "Challenge" }, "IDX_47efb914aed1f72dd39a306c7b"); + + b.HasIndex(new[] { "UserId" }, "IDX_f1a461a618fa1755692d0e0d59"); + + b.ToTable("attestation_challenge"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AuthSession", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AuthSession."); + + b.Property("Token") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("token"); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_19354ed146424a728c1112a8cbf"); + + b.HasIndex("AppId"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_62cb09e1129f6ec024ef66e183"); + + b.ToTable("auth_session"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Blocking", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("BlockeeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("blockeeId") + .HasComment("The blockee user ID."); + + b.Property("BlockerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("blockerId") + .HasComment("The blocker user ID."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Blocking."); + + b.HasKey("Id") + .HasName("PK_e5d9a541cc1965ee7e048ea09dd"); + + b.HasIndex(new[] { "BlockerId" }, "IDX_0627125f1a8a42c9a1929edb55"); + + b.HasIndex(new[] { "BlockeeId" }, "IDX_2cd4a2743a99671308f5417759"); + + b.HasIndex(new[] { "BlockerId", "BlockeeId" }, "IDX_98a1bc5cb30dfd159de056549f") + .IsUnique(); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_b9a354f7941c1e779f3b33aea6"); + + b.ToTable("blocking"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("BannerId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("bannerId") + .HasComment("The ID of banner Channel."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Channel."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description of the Channel."); + + b.Property("LastNotedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastNotedAt"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Channel."); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of notes."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("UsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("usersCount") + .HasComment("The count of users."); + + b.HasKey("Id") + .HasName("PK_590f33ee6ee7d76437acf362e39"); + + b.HasIndex("BannerId"); + + b.HasIndex(new[] { "UsersCount" }, "IDX_094b86cd36bb805d1aa1e8cc9a"); + + b.HasIndex(new[] { "NotesCount" }, "IDX_0f58c11241e649d2a638a8de94"); + + b.HasIndex(new[] { "LastNotedAt" }, "IDX_29ef80c6f13bcea998447fce43"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_71cb7b435b7c0d4843317e7e16"); + + b.HasIndex(new[] { "UserId" }, "IDX_823bae55bd81b3be6e05cff438"); + + b.ToTable("channel"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelFollowing", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ChannelFollowing."); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee channel ID."); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.HasKey("Id") + .HasName("PK_8b104be7f7415113f2a02cd5bdd"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_0e43068c3f92cab197c3d3cd86"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_11e71f2511589dcc8a4d3214f9"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_2e230dd45a10e671d781d99f3e") + .IsUnique(); + + b.HasIndex(new[] { "FollowerId" }, "IDX_6d8084ec9496e7334a4602707e"); + + b.ToTable("channel_following"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelNotePining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ChannelId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("channelId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ChannelNotePining."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.HasKey("Id") + .HasName("PK_44f7474496bcf2e4b741681146d"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "ChannelId" }, "IDX_8125f950afd3093acb10d2db8a"); + + b.HasIndex(new[] { "ChannelId", "NoteId" }, "IDX_f36fed37d6d4cdcc68c803cd9c") + .IsUnique(); + + b.ToTable("channel_note_pining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Clip."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description of the Clip."); + + b.Property("IsPublic") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isPublic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Clip."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_f0685dac8d4dd056d7255670b75"); + + b.HasIndex(new[] { "UserId" }, "IDX_2b5ec6c574d6802c94c80313fb"); + + b.ToTable("clip"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ClipNote", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ClipId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("clipId") + .HasComment("The clip ID."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The note ID."); + + b.HasKey("Id") + .HasName("PK_e94cda2f40a99b57e032a1a738b"); + + b.HasIndex(new[] { "NoteId", "ClipId" }, "IDX_6fc0ec357d55a18646262fdfff") + .IsUnique(); + + b.HasIndex(new[] { "NoteId" }, "IDX_a012eaf5c87c65da1deb5fdbfa"); + + b.HasIndex(new[] { "ClipId" }, "IDX_ebe99317bbbe9968a0c6f579ad"); + + b.ToTable("clip_note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("accessKey"); + + b.Property("Blurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("blurhash") + .HasComment("The BlurHash string."); + + b.Property("Comment") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("comment") + .HasComment("The comment of the DriveFile."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the DriveFile."); + + b.Property("FolderId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("folderId") + .HasComment("The parent folder ID. If null, it means the DriveFile is located in root."); + + b.Property("IsLink") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isLink") + .HasComment("Whether the DriveFile is direct link to remote server."); + + b.Property("IsSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSensitive") + .HasComment("Whether the DriveFile is NSFW."); + + b.Property("Md5") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("md5") + .HasComment("The MD5 hash of the DriveFile."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name") + .HasComment("The file name of the DriveFile."); + + b.Property("Properties") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("properties") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The any properties of the DriveFile. For example, it includes image width/height."); + + b.Property("RequestHeaders") + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("requestHeaders") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("RequestIp") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("requestIp"); + + b.Property("Size") + .HasColumnType("integer") + .HasColumnName("size") + .HasComment("The file size (bytes) of the DriveFile."); + + b.Property("Src") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("src"); + + b.Property("StoredInternal") + .HasColumnType("boolean") + .HasColumnName("storedInternal"); + + b.Property("ThumbnailAccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("thumbnailAccessKey"); + + b.Property("ThumbnailUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("thumbnailUrl") + .HasComment("The URL of the thumbnail of the DriveFile."); + + b.Property("Type") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("type") + .HasComment("The content type (MIME) of the DriveFile."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of the DriveFile. it will be null when the DriveFile is local."); + + b.Property("Url") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("The URL of the DriveFile."); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("The host of owner. It will be null if the user in local."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("WebpublicAccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("webpublicAccessKey"); + + b.Property("WebpublicType") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("webpublicType"); + + b.Property("WebpublicUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("webpublicUrl") + .HasComment("The URL of the webpublic of the DriveFile."); + + b.HasKey("Id") + .HasName("PK_43ddaaaf18c9e68029b7cbb032e"); + + b.HasIndex(new[] { "IsLink" }, "IDX_315c779174fe8247ab324f036e"); + + b.HasIndex(new[] { "Md5" }, "IDX_37bb9a1b4585f8a3beb24c62d6"); + + b.HasIndex(new[] { "UserId", "FolderId", "Id" }, "IDX_55720b33a61a7c806a8215b825"); + + b.HasIndex(new[] { "UserId" }, "IDX_860fa6f6c7df5bb887249fba22"); + + b.HasIndex(new[] { "UserHost" }, "IDX_92779627994ac79277f070c91e"); + + b.HasIndex(new[] { "Type" }, "IDX_a40b8df8c989d7db937ea27cf6"); + + b.HasIndex(new[] { "IsSensitive" }, "IDX_a7eba67f8b3fa27271e85d2e26"); + + b.HasIndex(new[] { "FolderId" }, "IDX_bb90d1956dafc4068c28aa7560"); + + b.HasIndex(new[] { "WebpublicAccessKey" }, "IDX_c55b2b7c284d9fef98026fc88e") + .IsUnique(); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_c8dfad3b72196dd1d6b5db168a"); + + b.HasIndex(new[] { "AccessKey" }, "IDX_d85a184c2540d2deba33daf642") + .IsUnique(); + + b.HasIndex(new[] { "Uri" }, "IDX_e5848eac4940934e23dbc17581"); + + b.HasIndex(new[] { "ThumbnailAccessKey" }, "IDX_e74022ce9a074b3866f70e0d27") + .IsUnique(); + + b.ToTable("drive_file"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the DriveFolder."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the DriveFolder."); + + b.Property("ParentId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("parentId") + .HasComment("The parent folder ID. If null, it means the DriveFolder is located in root."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_7a0c089191f5ebdc214e0af808a"); + + b.HasIndex(new[] { "ParentId" }, "IDX_00ceffb0cdc238b3233294f08f"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_02878d441ceae15ce060b73daf"); + + b.HasIndex(new[] { "UserId" }, "IDX_f4fc06e49c0171c85f1c48060d"); + + b.ToTable("drive_folder"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Emoji", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("Aliases") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("aliases") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Category") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("category"); + + b.Property("Height") + .HasColumnType("integer") + .HasColumnName("height") + .HasComment("Image height"); + + b.Property("Host") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("license"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("OriginalUrl") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("originalUrl"); + + b.Property("PublicUrl") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("publicUrl") + .HasDefaultValueSql("''::character varying"); + + b.Property("Type") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("type"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri"); + + b.Property("Width") + .HasColumnType("integer") + .HasColumnName("width") + .HasComment("Image width"); + + b.HasKey("Id") + .HasName("PK_df74ce05e24999ee01ea0bc50a3"); + + b.HasIndex(new[] { "Name", "Host" }, "IDX_4f4d35e1256c84ae3d1f0eab10") + .IsUnique(); + + b.HasIndex(new[] { "Host" }, "IDX_5900e907bb46516ddf2871327c"); + + b.HasIndex(new[] { "Name" }, "IDX_b37dafc86e9af007e3295c2781"); + + b.ToTable("emoji"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the FollowRequest."); + + b.Property("FolloweeHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeHost") + .HasComment("[Denormalized]"); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee user ID."); + + b.Property("FolloweeInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeInbox") + .HasComment("[Denormalized]"); + + b.Property("FolloweeSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerHost") + .HasComment("[Denormalized]"); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.Property("FollowerInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("RequestId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("requestId") + .HasComment("id of Follow Activity."); + + b.HasKey("Id") + .HasName("PK_53a9aa3725f7a3deb150b39dbfc"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_12c01c0d1a79f77d9f6c15fadd"); + + b.HasIndex(new[] { "FollowerId" }, "IDX_a7fd92dd6dc519e6fb435dd108"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_d54a512b822fac7ed52800f6b4") + .IsUnique(); + + b.ToTable("follow_request"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Following", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Following."); + + b.Property("FolloweeHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeHost") + .HasComment("[Denormalized]"); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee user ID."); + + b.Property("FolloweeInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeInbox") + .HasComment("[Denormalized]"); + + b.Property("FolloweeSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerHost") + .HasComment("[Denormalized]"); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.Property("FollowerInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerSharedInbox") + .HasComment("[Denormalized]"); + + b.HasKey("Id") + .HasName("PK_c76c6e044bdf76ecf8bfb82a645"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_24e0042143a18157b234df186c"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_307be5f1d1252e0388662acb96") + .IsUnique(); + + b.HasIndex(new[] { "FollowerHost" }, "IDX_4ccd2239268ebbd1b35e318754"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_582f8fab771a9040a12961f3e7"); + + b.HasIndex(new[] { "FollowerId" }, "IDX_6516c5a6f3c015b4eed39978be"); + + b.HasIndex(new[] { "FolloweeHost" }, "IDX_fcdafee716dfe9c3b5fde90f30"); + + b.ToTable("following"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryLike", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("PostId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("postId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_853ab02be39b8de45cd720cc15f"); + + b.HasIndex("PostId"); + + b.HasIndex(new[] { "UserId" }, "IDX_8fd5215095473061855ceb948c"); + + b.HasIndex(new[] { "UserId", "PostId" }, "IDX_df1b5f4099e99fb0bc5eae53b6") + .IsUnique(); + + b.ToTable("gallery_like"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the GalleryPost."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("IsSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSensitive") + .HasComment("Whether the post is sensitive."); + + b.Property("LikedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("likedCount"); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the GalleryPost."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.HasKey("Id") + .HasName("PK_8e90d7b6015f2c4518881b14753"); + + b.HasIndex(new[] { "Tags" }, "IDX_05cca34b985d1b8edc1d1e28df"); + + b.HasIndex(new[] { "LikedCount" }, "IDX_1a165c68a49d08f11caffbd206"); + + b.HasIndex(new[] { "FileIds" }, "IDX_3ca50563facd913c425e7a89ee"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_8f1a239bd077c8864a20c62c2c"); + + b.HasIndex(new[] { "UserId" }, "IDX_985b836dddd8615e432d7043dd"); + + b.HasIndex(new[] { "IsSensitive" }, "IDX_f2d744d9a14d0dfb8b96cb7fc5"); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_f631d37835adb04792e361807c"); + + b.ToTable("gallery_post"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Hashtag", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AttachedLocalUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedLocalUserIds"); + + b.Property("AttachedLocalUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedLocalUsersCount"); + + b.Property>("AttachedRemoteUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedRemoteUserIds"); + + b.Property("AttachedRemoteUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedRemoteUsersCount"); + + b.Property>("AttachedUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedUserIds"); + + b.Property("AttachedUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedUsersCount"); + + b.Property>("MentionedLocalUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedLocalUserIds"); + + b.Property("MentionedLocalUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedLocalUsersCount"); + + b.Property>("MentionedRemoteUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedRemoteUserIds"); + + b.Property("MentionedRemoteUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedRemoteUsersCount"); + + b.Property>("MentionedUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedUserIds"); + + b.Property("MentionedUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedUsersCount"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_cb36eb8af8412bfa978f1165d78"); + + b.HasIndex(new[] { "AttachedRemoteUsersCount" }, "IDX_0b03cbcd7e6a7ce068efa8ecc2"); + + b.HasIndex(new[] { "AttachedLocalUsersCount" }, "IDX_0c44bf4f680964145f2a68a341"); + + b.HasIndex(new[] { "MentionedLocalUsersCount" }, "IDX_0e206cec573f1edff4a3062923"); + + b.HasIndex(new[] { "MentionedUsersCount" }, "IDX_2710a55f826ee236ea1a62698f"); + + b.HasIndex(new[] { "Name" }, "IDX_347fec870eafea7b26c8a73bac") + .IsUnique(); + + b.HasIndex(new[] { "MentionedRemoteUsersCount" }, "IDX_4c02d38a976c3ae132228c6fce"); + + b.HasIndex(new[] { "AttachedUsersCount" }, "IDX_d57f9030cd3af7f63ffb1c267c"); + + b.ToTable("hashtag"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("Content") + .HasColumnType("text") + .HasColumnName("content"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.HasKey("NoteId") + .HasName("PK_6ef86ec901b2017cbe82d3a8286"); + + b.ToTable("html_note_cache_entry"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("Bio") + .HasColumnType("text") + .HasColumnName("bio"); + + b.Property("Fields") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("fields") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.HasKey("UserId") + .HasName("PK_920b9474e3c9cae3f3c37c057e1"); + + b.ToTable("html_user_cache_entry"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Instance", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CaughtAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("caughtAt") + .HasComment("The caught date of the Instance."); + + b.Property("Description") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("description"); + + b.Property("FaviconUrl") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("faviconUrl"); + + b.Property("FollowersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followersCount"); + + b.Property("FollowingCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followingCount"); + + b.Property("Host") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host") + .HasComment("The host of the Instance."); + + b.Property("IconUrl") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("iconUrl"); + + b.Property("InfoUpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("infoUpdatedAt"); + + b.Property("IsNotResponding") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isNotResponding"); + + b.Property("IsSuspended") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSuspended"); + + b.Property("LastCommunicatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastCommunicatedAt"); + + b.Property("LatestRequestReceivedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestRequestReceivedAt"); + + b.Property("LatestRequestSentAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestRequestSentAt"); + + b.Property("LatestStatus") + .HasColumnType("integer") + .HasColumnName("latestStatus"); + + b.Property("MaintainerEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("maintainerEmail"); + + b.Property("MaintainerName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerName"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of the notes of the Instance."); + + b.Property("OpenRegistrations") + .HasColumnType("boolean") + .HasColumnName("openRegistrations"); + + b.Property("SoftwareName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("softwareName") + .HasComment("The software of the Instance."); + + b.Property("SoftwareVersion") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("softwareVersion"); + + b.Property("ThemeColor") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("themeColor"); + + b.Property("UsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("usersCount") + .HasComment("The count of the users of the Instance."); + + b.HasKey("Id") + .HasName("PK_eaf60e4a0c399c9935413e06474"); + + b.HasIndex(new[] { "CaughtAt" }, "IDX_2cd3b2a6b4cf0b910b260afe08"); + + b.HasIndex(new[] { "IsSuspended" }, "IDX_34500da2e38ac393f7bb6b299c"); + + b.HasIndex(new[] { "Host" }, "IDX_8d5afc98982185799b160e10eb") + .IsUnique(); + + b.ToTable("instance"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.MessagingMessage", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the MessagingMessage."); + + b.Property("FileId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("fileId"); + + b.Property("GroupId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("groupId") + .HasComment("The recipient group ID."); + + b.Property("IsRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isRead"); + + b.Property>("Reads") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("reads") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("RecipientId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("recipientId") + .HasComment("The recipient user ID."); + + b.Property("Text") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("text"); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The sender user ID."); + + b.HasKey("Id") + .HasName("PK_db398fd79dc95d0eb8c30456eaa"); + + b.HasIndex("FileId"); + + b.HasIndex(new[] { "GroupId" }, "IDX_2c4be03b446884f9e9c502135b"); + + b.HasIndex(new[] { "UserId" }, "IDX_5377c307783fce2b6d352e1203"); + + b.HasIndex(new[] { "RecipientId" }, "IDX_cac14a4e3944454a5ce7daa514"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e21cd3646e52ef9c94aaf17c2e"); + + b.ToTable("messaging_message"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Metum", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AllowedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("allowedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("AutofollowedAccount") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("autofollowedAccount"); + + b.Property("BackgroundImageUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("backgroundImageUrl"); + + b.Property("BannerUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("bannerUrl"); + + b.Property>("BlockedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("blockedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("CacheRemoteFiles") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("cacheRemoteFiles"); + + b.Property>("CustomMotd") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("customMOTD") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property>("CustomSplashIcons") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("customSplashIcons") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("DeeplAuthKey") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("deeplAuthKey"); + + b.Property("DeeplIsPro") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("deeplIsPro"); + + b.Property("DefaultDarkTheme") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("defaultDarkTheme"); + + b.Property("DefaultLightTheme") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("defaultLightTheme"); + + b.Property("DefaultReaction") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("defaultReaction") + .HasDefaultValueSql("'⭐'::character varying"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("description"); + + b.Property("DisableGlobalTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableGlobalTimeline"); + + b.Property("DisableLocalTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableLocalTimeline"); + + b.Property("DisableRecommendedTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("disableRecommendedTimeline"); + + b.Property("DisableRegistration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableRegistration"); + + b.Property("DiscordClientId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("discordClientId"); + + b.Property("DiscordClientSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("discordClientSecret"); + + b.Property("DonationLink") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("donationLink"); + + b.Property("Email") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email"); + + b.Property("EmailRequiredForSignup") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("emailRequiredForSignup"); + + b.Property("EnableActiveEmailValidation") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("enableActiveEmailValidation"); + + b.Property("EnableDiscordIntegration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableDiscordIntegration"); + + b.Property("EnableEmail") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableEmail"); + + b.Property("EnableGithubIntegration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableGithubIntegration"); + + b.Property("EnableHcaptcha") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableHcaptcha"); + + b.Property("EnableIdenticonGeneration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("enableIdenticonGeneration"); + + b.Property("EnableIpLogging") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableIpLogging"); + + b.Property("EnableRecaptcha") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableRecaptcha"); + + b.Property("EnableServerMachineStats") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableServerMachineStats"); + + b.Property("ErrorImageUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("errorImageUrl") + .HasDefaultValueSql("'/static-assets/badges/error.png'::character varying"); + + b.Property("ExperimentalFeatures") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("experimentalFeatures") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("FeedbackUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("feedbackUrl") + .HasDefaultValueSql("'https://iceshrimp.dev/iceshrimp/iceshrimp/issues/new'::character varying"); + + b.Property("GithubClientId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("githubClientId"); + + b.Property("GithubClientSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("githubClientSecret"); + + b.Property("HcaptchaSecretKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("hcaptchaSecretKey"); + + b.Property("HcaptchaSiteKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("hcaptchaSiteKey"); + + b.Property>("HiddenTags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("hiddenTags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("IconUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("iconUrl"); + + b.Property>("Langs") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(64)[]") + .HasColumnName("langs") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("LibreTranslateApiKey") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("libreTranslateApiKey"); + + b.Property("LibreTranslateApiUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("libreTranslateApiUrl"); + + b.Property("LocalDriveCapacityMb") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1024) + .HasColumnName("localDriveCapacityMb") + .HasComment("Drive capacity of a local user (MB)"); + + b.Property("LogoImageUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("logoImageUrl"); + + b.Property("MaintainerEmail") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerEmail"); + + b.Property("MaintainerName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerName"); + + b.Property("MascotImageUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("mascotImageUrl") + .HasDefaultValueSql("'/static-assets/badges/info.png'::character varying"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ObjectStorageAccessKey") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageAccessKey"); + + b.Property("ObjectStorageBaseUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageBaseUrl"); + + b.Property("ObjectStorageBucket") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageBucket"); + + b.Property("ObjectStorageEndpoint") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageEndpoint"); + + b.Property("ObjectStoragePort") + .HasColumnType("integer") + .HasColumnName("objectStoragePort"); + + b.Property("ObjectStoragePrefix") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStoragePrefix"); + + b.Property("ObjectStorageRegion") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageRegion"); + + b.Property("ObjectStorageS3forcePathStyle") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageS3ForcePathStyle"); + + b.Property("ObjectStorageSecretKey") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageSecretKey"); + + b.Property("ObjectStorageSetPublicRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("objectStorageSetPublicRead"); + + b.Property("ObjectStorageUseProxy") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageUseProxy"); + + b.Property("ObjectStorageUseSsl") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageUseSSL"); + + b.Property("PinnedClipId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pinnedClipId"); + + b.Property>("PinnedPages") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(512)[]") + .HasColumnName("pinnedPages") + .HasDefaultValueSql("'{/featured,/channels,/explore,/pages,/about-iceshrimp}'::character varying[]"); + + b.Property>("PinnedUsers") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("pinnedUsers") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("PrivateMode") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("privateMode"); + + b.Property("RecaptchaSecretKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("recaptchaSecretKey"); + + b.Property("RecaptchaSiteKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("recaptchaSiteKey"); + + b.Property>("RecommendedInstances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("recommendedInstances") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("RemoteDriveCapacityMb") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(32) + .HasColumnName("remoteDriveCapacityMb") + .HasComment("Drive capacity of a remote user (MB)"); + + b.Property("RepositoryUrl") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("repositoryUrl") + .HasDefaultValueSql("'https://iceshrimp.dev/iceshrimp/iceshrimp'::character varying"); + + b.Property("SecureMode") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("secureMode"); + + b.Property>("SilencedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("silencedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("SmtpHost") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("smtpHost"); + + b.Property("SmtpPass") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("smtpPass"); + + b.Property("SmtpPort") + .HasColumnType("integer") + .HasColumnName("smtpPort"); + + b.Property("SmtpSecure") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("smtpSecure"); + + b.Property("SmtpUser") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("smtpUser"); + + b.Property("SummalyProxy") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("summalyProxy"); + + b.Property("SwPrivateKey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("swPrivateKey"); + + b.Property("SwPublicKey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("swPublicKey"); + + b.Property("ThemeColor") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("themeColor"); + + b.Property("ToSurl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("ToSUrl"); + + b.Property("UseObjectStorage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("useObjectStorage"); + + b.HasKey("Id") + .HasName("PK_c4c17a6c2bd7651338b60fc590b"); + + b.ToTable("meta"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ModerationLog", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ModerationLog."); + + b.Property("Info") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("info"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("type"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_d0adca6ecfd068db83e4526cc26"); + + b.HasIndex(new[] { "UserId" }, "IDX_a08ad074601d204e0f69da9a95"); + + b.ToTable("moderation_log"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Muting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Muting."); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("MuteeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muteeId") + .HasComment("The mutee user ID."); + + b.Property("MuterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muterId") + .HasComment("The muter user ID."); + + b.HasKey("Id") + .HasName("PK_2e92d06c8b5c602eeb27ca9ba48"); + + b.HasIndex(new[] { "MuterId", "MuteeId" }, "IDX_1eb9d9824a630321a29fd3b290") + .IsUnique(); + + b.HasIndex(new[] { "MuterId" }, "IDX_93060675b4a79a577f31d260c6"); + + b.HasIndex(new[] { "ExpiresAt" }, "IDX_c1fd1c3dfb0627aa36c253fd14"); + + b.HasIndex(new[] { "MuteeId" }, "IDX_ec96b4fed9dae517e0dbbe0675"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_f86d57fbca33c7a4e6897490cc"); + + b.ToTable("muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AttachedFileTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("attachedFileTypes") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("ChannelId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("channelId") + .HasComment("The ID of source channel."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Note."); + + b.Property("Cw") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("cw"); + + b.Property>("Emojis") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("emojis") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("HasPoll") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hasPoll"); + + b.Property("LocalOnly") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("localOnly"); + + b.Property("MentionedRemoteUsers") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasColumnName("mentionedRemoteUsers") + .HasDefaultValueSql("'[]'::text"); + + b.Property>("Mentions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentions") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Reactions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("reactions") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("RenoteCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("renoteCount"); + + b.Property("RenoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("renoteId") + .HasComment("The ID of renote target."); + + b.Property("RenoteUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("renoteUserHost") + .HasComment("[Denormalized]"); + + b.Property("RenoteUserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("renoteUserId") + .HasComment("[Denormalized]"); + + b.Property("RepliesCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("repliesCount"); + + b.Property("ReplyId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("replyId") + .HasComment("The ID of reply target."); + + b.Property("ReplyUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("replyUserHost") + .HasComment("[Denormalized]"); + + b.Property("ReplyUserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("replyUserId") + .HasComment("[Denormalized]"); + + b.Property("Score") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("score"); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Text") + .HasColumnType("text") + .HasColumnName("text"); + + b.Property("ThreadId") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("threadId"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Note."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of a note. it will be null when the note is local."); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("The human readable url of a note. it will be null when the note is local."); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.Property("Visibility") + .HasColumnType("note_visibility_enum") + .HasColumnName("visibility"); + + b.Property>("VisibleUserIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("visibleUserIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.HasKey("Id") + .HasName("PK_96d0c172a4fba276b1bbed43058"); + + b.HasIndex(new[] { "Uri" }, "IDX_153536c67d05e9adb24e99fc2b") + .IsUnique(); + + b.HasIndex(new[] { "ReplyId" }, "IDX_17cb3553c700a4985dff5a30ff"); + + b.HasIndex(new[] { "AttachedFileTypes" }, "IDX_25dfc71b0369b003a4cd434d0b"); + + b.HasIndex(new[] { "FileIds" }, "IDX_51c063b6a133a9cb87145450f5"); + + b.HasIndex(new[] { "RenoteId" }, "IDX_52ccc804d7c69037d558bac4c9"); + + b.HasIndex(new[] { "Mentions" }, "IDX_54ebcb6d27222913b908d56fd8"); + + b.HasIndex(new[] { "UserId" }, "IDX_5b87d9d19127bd5d92026017a7"); + + b.HasIndex(new[] { "UserHost" }, "IDX_7125a826ab192eb27e11d358a5"); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_796a8c03959361f97dc2be1d5c"); + + b.HasIndex(new[] { "Tags" }, "IDX_88937d94d7443d9a99a76fa5c0"); + + b.HasIndex(new[] { "Mentions" }, "IDX_NOTE_MENTIONS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Mentions" }, "IDX_NOTE_MENTIONS"), "gin"); + + b.HasIndex(new[] { "Tags" }, "IDX_NOTE_TAGS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Tags" }, "IDX_NOTE_TAGS"), "gin"); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_NOTE_VISIBLE_USER_IDS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "VisibleUserIds" }, "IDX_NOTE_VISIBLE_USER_IDS"), "gin"); + + b.HasIndex(new[] { "ThreadId" }, "IDX_d4ebdef929896d6dc4a3c5bb48"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e7c0567f5261063592f022e9b5"); + + b.HasIndex(new[] { "ChannelId" }, "IDX_f22169eb10657bded6d875ac8f"); + + b.HasIndex(new[] { "CreatedAt", "UserId" }, "IDX_note_createdAt_userId"); + + b.HasIndex(new[] { "Id", "UserHost" }, "IDX_note_id_userHost"); + + b.HasIndex(new[] { "Url" }, "IDX_note_url"); + + b.HasIndex(new[] { "UserId", "Id" }, "IDX_note_userId_id"); + + b.HasIndex(new[] { "Text" }, "note_text_fts_idx"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Text" }, "note_text_fts_idx"), "gin"); + NpgsqlIndexBuilderExtensions.HasOperators(b.HasIndex(new[] { "Text" }, "note_text_fts_idx"), new[] { "gin_trgm_ops" }); + + b.ToTable("note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteEdit", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Cw") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("cw"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The ID of note."); + + b.Property("Text") + .HasColumnType("text") + .HasColumnName("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Note."); + + b.HasKey("Id") + .HasName("PK_736fc6e0d4e222ecc6f82058e08"); + + b.HasIndex(new[] { "NoteId" }, "IDX_702ad5ae993a672e4fbffbcd38"); + + b.ToTable("note_edit"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteFavorite", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteFavorite."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_af0da35a60b9fa4463a62082b36"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_0f4fb9ad355f3effff221ef245") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_47f4b1892f5d6ba8efb3057d81"); + + b.ToTable("note_favorite"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteReaction", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteReaction."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("Reaction") + .IsRequired() + .HasMaxLength(260) + .HasColumnType("character varying(260)") + .HasColumnName("reaction"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_767ec729b108799b587a3fcc9cf"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_01f4581f114e0ebd2bbb876f0b"); + + b.HasIndex(new[] { "UserId" }, "IDX_13761f64257f40c5636d0ff95e"); + + b.HasIndex(new[] { "NoteId" }, "IDX_45145e4953780f3cd5656f0ea6"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_ad0c221b25672daf2df320a817") + .IsUnique(); + + b.ToTable("note_reaction"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteThreadMuting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("ThreadId") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("threadId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_ec5936d94d1a0369646d12a3a47"); + + b.HasIndex(new[] { "UserId" }, "IDX_29c11c7deb06615076f8c95b80"); + + b.HasIndex(new[] { "UserId", "ThreadId" }, "IDX_ae7aab18a2641d3e5f25e0c4ea") + .IsUnique(); + + b.HasIndex(new[] { "ThreadId" }, "IDX_c426394644267453e76f036926"); + + b.ToTable("note_thread_muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteUnread", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("IsMentioned") + .HasColumnType("boolean") + .HasColumnName("isMentioned"); + + b.Property("IsSpecified") + .HasColumnType("boolean") + .HasColumnName("isSpecified"); + + b.Property("NoteChannelId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteChannelId") + .HasComment("[Denormalized]"); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("NoteUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteUserId") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_1904eda61a784f57e6e51fa9c1f"); + + b.HasIndex(new[] { "IsMentioned" }, "IDX_25b1dd384bec391b07b74b861c"); + + b.HasIndex(new[] { "NoteUserId" }, "IDX_29e8c1d579af54d4232939f994"); + + b.HasIndex(new[] { "UserId" }, "IDX_56b0166d34ddae49d8ef7610bb"); + + b.HasIndex(new[] { "NoteChannelId" }, "IDX_6a57f051d82c6d4036c141e107"); + + b.HasIndex(new[] { "IsSpecified" }, "IDX_89a29c9237b8c3b6b3cbb4cb30"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_d908433a4953cc13216cd9c274") + .IsUnique(); + + b.HasIndex(new[] { "NoteId" }, "IDX_e637cba4dc4410218c4251260e"); + + b.ToTable("note_unread"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteWatching", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteWatching."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The target Note ID."); + + b.Property("NoteUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteUserId") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The watcher ID."); + + b.HasKey("Id") + .HasName("PK_49286fdb23725945a74aa27d757"); + + b.HasIndex(new[] { "NoteId" }, "IDX_03e7028ab8388a3f5e3ce2a861"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_318cdf42a9cfc11f479bd802bb"); + + b.HasIndex(new[] { "NoteUserId" }, "IDX_44499765eec6b5489d72c4253b"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_a42c93c69989ce1d09959df4cf") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_b0134ec406e8d09a540f818288"); + + b.ToTable("note_watching"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Notification", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppAccessTokenId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appAccessTokenId"); + + b.Property("Choice") + .HasColumnType("integer") + .HasColumnName("choice"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Notification."); + + b.Property("CustomBody") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("customBody"); + + b.Property("CustomHeader") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("customHeader"); + + b.Property("CustomIcon") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("customIcon"); + + b.Property("FollowRequestId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followRequestId"); + + b.Property("IsRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isRead") + .HasComment("Whether the notification was read."); + + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("NotifieeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("notifieeId") + .HasComment("The ID of recipient user of the Notification."); + + b.Property("NotifierId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("notifierId") + .HasComment("The ID of sender user of the Notification."); + + b.Property("Reaction") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("reaction"); + + b.Property("Type") + .HasColumnType("notification_type_enum") + .HasColumnName("type") + .HasComment("The type of the Notification."); + + b.Property("UserGroupInvitationId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupInvitationId"); + + b.HasKey("Id") + .HasName("PK_705b6c7cdf9b2c2ff7ac7872cb7"); + + b.HasIndex("FollowRequestId"); + + b.HasIndex("NoteId"); + + b.HasIndex("UserGroupInvitationId"); + + b.HasIndex(new[] { "IsRead" }, "IDX_080ab397c379af09b9d2169e5b"); + + b.HasIndex(new[] { "Type" }, "IDX_33f33cc8ef29d805a97ff4628b"); + + b.HasIndex(new[] { "NotifierId" }, "IDX_3b4e96eec8d36a8bbb9d02aa71"); + + b.HasIndex(new[] { "NotifieeId" }, "IDX_3c601b70a1066d2c8b517094cb"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_b11a5e627c41d4dc3170f1d370"); + + b.HasIndex(new[] { "AppAccessTokenId" }, "IDX_e22bf6bda77b6adc1fd9e75c8c"); + + b.ToTable("notification"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthApp", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ClientId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("clientId") + .HasComment("The client id of the OAuth application"); + + b.Property("ClientSecret") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("clientSecret") + .HasComment("The client secret of the OAuth application"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth application"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the OAuth application"); + + b.Property>("RedirectUris") + .IsRequired() + .HasColumnType("character varying(512)[]") + .HasColumnName("redirectUris") + .HasComment("The redirect URIs of the OAuth application"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("scopes") + .HasComment("The scopes requested by the OAuth application"); + + b.Property("Website") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("website") + .HasComment("The website of the OAuth application"); + + b.HasKey("Id") + .HasName("PK_3256b97c0a3ee2d67240805dca4"); + + b.HasIndex(new[] { "ClientId" }, "IDX_65b61f406c811241e1315a2f82") + .IsUnique(); + + b.ToTable("oauth_app"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthToken", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .HasColumnType("boolean") + .HasColumnName("active") + .HasComment("Whether or not the token has been activated"); + + b.Property("AppId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("code") + .HasComment("The auth code for the OAuth token"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth token"); + + b.Property("RedirectUri") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("redirectUri") + .HasComment("The redirect URI of the OAuth token"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("scopes") + .HasComment("The scopes requested by the OAuth token"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("token") + .HasComment("The OAuth token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_7e6a25a3cc4395d1658f5b89c73"); + + b.HasIndex("AppId"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_2cbeb4b389444bcf4379ef4273"); + + b.HasIndex(new[] { "Code" }, "IDX_dc5fe174a8b59025055f0ec136"); + + b.ToTable("oauth_token"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AlignCenter") + .HasColumnType("boolean") + .HasColumnName("alignCenter"); + + b.Property("Content") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("content") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Page."); + + b.Property("EyeCatchingImageId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("eyeCatchingImageId"); + + b.Property("Font") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("font"); + + b.Property("HideTitleWhenPinned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideTitleWhenPinned"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("isPublic"); + + b.Property("LikedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("likedCount"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Script") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(16384) + .HasColumnType("character varying(16384)") + .HasColumnName("script") + .HasDefaultValueSql("''::character varying"); + + b.Property("Summary") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("summary"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Page."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.Property("Variables") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("variables") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Visibility") + .HasColumnType("page_visibility_enum") + .HasColumnName("visibility"); + + b.Property>("VisibleUserIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("visibleUserIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.HasKey("Id") + .HasName("PK_742f4117e065c5b6ad21b37ba1f"); + + b.HasIndex("EyeCatchingImageId"); + + b.HasIndex(new[] { "UserId", "Name" }, "IDX_2133ef8317e4bdb839c0dcbf13") + .IsUnique(); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_90148bbc2bf0854428786bfc15"); + + b.HasIndex(new[] { "UserId" }, "IDX_ae1d917992dd0c9d9bbdad06c4"); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_af639b066dfbca78b01a920f8a"); + + b.HasIndex(new[] { "Name" }, "IDX_b82c19c08afb292de4600d99e4"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_fbb4297c927a9b85e9cefa2eb1"); + + b.ToTable("page"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PageLike", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("PageId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pageId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_813f034843af992d3ae0f43c64c"); + + b.HasIndex("PageId"); + + b.HasIndex(new[] { "UserId" }, "IDX_0e61efab7f88dbb79c9166dbb4"); + + b.HasIndex(new[] { "UserId", "PageId" }, "IDX_4ce6fb9c70529b4c8ac46c9bfa") + .IsUnique(); + + b.ToTable("page_like"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PasswordResetRequest", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_fcf4b02eae1403a2edaf87fd074"); + + b.HasIndex(new[] { "Token" }, "IDX_0b575fa9a4cfe638a925949285") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_4bb7fd4a34492ae0e6cc8d30ac"); + + b.ToTable("password_reset_request"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Poll", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property>("Choices") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("choices") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("Multiple") + .HasColumnType("boolean") + .HasColumnName("multiple"); + + b.Property("NoteVisibility") + .HasColumnType("poll_notevisibility_enum") + .HasColumnName("noteVisibility") + .HasComment("[Denormalized]"); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("[Denormalized]"); + + b.Property>("Votes") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("votes"); + + b.HasKey("NoteId") + .HasName("PK_da851e06d0dfe2ef397d8b1bf1b"); + + b.HasIndex(new[] { "UserId" }, "IDX_0610ebcfcfb4a18441a9bcdab2"); + + b.HasIndex(new[] { "UserHost" }, "IDX_7fa20a12319c7f6dc3aed98c0a"); + + b.ToTable("poll"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PollVote", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Choice") + .HasColumnType("integer") + .HasColumnName("choice"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the PollVote."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_fd002d371201c472490ba89c6a0"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_0fb627e1c2f753262a74f0562d"); + + b.HasIndex(new[] { "UserId", "NoteId", "Choice" }, "IDX_50bd7164c5b78f1f4a42c4d21f") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_66d2bd2ee31d14bcc23069a89f"); + + b.HasIndex(new[] { "NoteId" }, "IDX_aecfbd5ef60374918e63ee95fa"); + + b.ToTable("poll_vote"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoNote", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("[Denormalized]"); + + b.HasKey("NoteId") + .HasName("PK_e263909ca4fe5d57f8d4230dd5c"); + + b.HasIndex(new[] { "UserId" }, "IDX_83f0862e9bae44af52ced7099e"); + + b.ToTable("promo_note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoRead", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the PromoRead."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_61917c1541002422b703318b7c9"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_2882b8a1a07c7d281a98b6db16") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_9657d55550c3d37bfafaf7d4b0"); + + b.ToTable("promo_read"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistrationTicket", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.HasKey("Id") + .HasName("PK_f11696b6fafcf3662d4292734f8"); + + b.HasIndex(new[] { "Code" }, "IDX_0ff69e8dfa9fe31bb4a4660f59") + .IsUnique(); + + b.ToTable("registration_ticket"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistryItem", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the RegistryItem."); + + b.Property("Domain") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("domain"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("key") + .HasComment("The key of the RegistryItem."); + + b.Property>("Scope") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(1024)[]") + .HasColumnName("scope") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the RegistryItem."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("Value") + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("value") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The value of the RegistryItem."); + + b.HasKey("Id") + .HasName("PK_64b3f7e6008b4d89b826cd3af95"); + + b.HasIndex(new[] { "Domain" }, "IDX_0a72bdfcdb97c0eca11fe7ecad"); + + b.HasIndex(new[] { "Scope" }, "IDX_22baca135bb8a3ea1a83d13df3"); + + b.HasIndex(new[] { "UserId" }, "IDX_fb9d21ba0abb83223263df6bcb"); + + b.ToTable("registry_item"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Relay", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Inbox") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("inbox"); + + b.Property("Status") + .HasColumnType("relay_status_enum") + .HasColumnName("status"); + + b.HasKey("Id") + .HasName("PK_78ebc9cfddf4292633b7ba57aee"); + + b.HasIndex(new[] { "Inbox" }, "IDX_0d9a1738f2cf7f3b1c3334dfab") + .IsUnique(); + + b.ToTable("relay"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RenoteMuting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Muting."); + + b.Property("MuteeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muteeId") + .HasComment("The mutee user ID."); + + b.Property("MuterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muterId") + .HasComment("The muter user ID."); + + b.HasKey("Id") + .HasName("PK_renoteMuting_id"); + + b.HasIndex(new[] { "MuterId", "MuteeId" }, "IDX_0d801c609cec4e9eb4b6b4490c") + .IsUnique(); + + b.HasIndex(new[] { "MuterId" }, "IDX_7aa72a5fe76019bfe8e5e0e8b7"); + + b.HasIndex(new[] { "MuteeId" }, "IDX_7eac97594bcac5ffcf2068089b"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_d1259a2c2b7bb413ff449e8711"); + + b.ToTable("renote_muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Session", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .HasColumnType("boolean") + .HasColumnName("active") + .HasComment("Whether or not the token has been activated (i.e. 2fa has been confirmed)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth token"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("token") + .HasComment("The authorization token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_f55da76ac1c3ac420f444d2ff11"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_232f8e85d7633bd6ddfad42169"); + + b.ToTable("session"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Signin", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Signin."); + + b.Property("Headers") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("headers"); + + b.Property("Ip") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ip"); + + b.Property("Success") + .HasColumnType("boolean") + .HasColumnName("success"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_9e96ddc025712616fc492b3b588"); + + b.HasIndex(new[] { "UserId" }, "IDX_2c308dbdc50d94dc625670055f"); + + b.ToTable("signin"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.SwSubscription", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Auth") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("auth"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Endpoint") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("endpoint"); + + b.Property("Publickey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("publickey"); + + b.Property("SendReadMessage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("sendReadMessage"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_e8f763631530051b95eb6279b91"); + + b.HasIndex(new[] { "UserId" }, "IDX_97754ca6f2baff9b4abb7f853d"); + + b.ToTable("sw_subscription"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UsedUsername", b => + { + b.Property("Username") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.HasKey("Username") + .HasName("PK_78fd79d2d24c6ac2f4cc9a31a5d"); + + b.ToTable("used_username"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AlsoKnownAs") + .HasColumnType("text") + .HasColumnName("alsoKnownAs") + .HasComment("URIs the user is known as too"); + + b.Property("AvatarBlurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("avatarBlurhash") + .HasComment("The blurhash of the avatar DriveFile"); + + b.Property("AvatarId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("avatarId") + .HasComment("The ID of avatar DriveFile."); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("avatarUrl") + .HasComment("The URL of the avatar DriveFile"); + + b.Property("BannerBlurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("bannerBlurhash") + .HasComment("The blurhash of the banner DriveFile"); + + b.Property("BannerId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("bannerId") + .HasComment("The ID of banner DriveFile."); + + b.Property("BannerUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("bannerUrl") + .HasComment("The URL of the banner DriveFile"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the User."); + + b.Property("DriveCapacityOverrideMb") + .HasColumnType("integer") + .HasColumnName("driveCapacityOverrideMb") + .HasComment("Overrides user drive capacity limit"); + + b.Property>("Emojis") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("emojis") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Featured") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("featured") + .HasComment("The featured URL of the User. It will be null if the origin of the user is local."); + + b.Property("FollowersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followersCount") + .HasComment("The count of followers."); + + b.Property("FollowersUri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followersUri") + .HasComment("The URI of the user Follower Collection. It will be null if the origin of the user is local."); + + b.Property("FollowingCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followingCount") + .HasComment("The count of following."); + + b.Property("HideOnlineStatus") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideOnlineStatus"); + + b.Property("Host") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host") + .HasComment("The host of the User. It will be null if the origin of the user is local."); + + b.Property("Inbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("inbox") + .HasComment("The inbox URL of the User. It will be null if the origin of the user is local."); + + b.Property("IsAdmin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isAdmin") + .HasComment("Whether the User is the admin."); + + b.Property("IsBot") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isBot") + .HasComment("Whether the User is a bot."); + + b.Property("IsCat") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isCat") + .HasComment("Whether the User is a cat."); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isDeleted") + .HasComment("Whether the User is deleted."); + + b.Property("IsExplorable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("isExplorable") + .HasComment("Whether the User is explorable."); + + b.Property("IsLocked") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isLocked") + .HasComment("Whether the User is locked."); + + b.Property("IsModerator") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isModerator") + .HasComment("Whether the User is a moderator."); + + b.Property("IsSilenced") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSilenced") + .HasComment("Whether the User is silenced."); + + b.Property("IsSuspended") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSuspended") + .HasComment("Whether the User is suspended."); + + b.Property("LastActiveDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastActiveDate"); + + b.Property("LastFetchedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastFetchedAt"); + + b.Property("MovedToUri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("movedToUri") + .HasComment("The URI of the new account of the User"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the User."); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of notes."); + + b.Property("SharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("sharedInbox") + .HasComment("The sharedInbox URL of the User. It will be null if the origin of the user is local."); + + b.Property("SpeakAsCat") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("speakAsCat") + .HasComment("Whether to speak as a cat if isCat."); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Token") + .HasMaxLength(16) + .HasColumnType("character(16)") + .HasColumnName("token") + .IsFixedLength() + .HasComment("The native access token of the User. It will be null if the origin of the user is local."); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the User."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of the User. It will be null if the origin of the user is local."); + + b.Property("Username") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username") + .HasComment("The username of the User."); + + b.Property("UsernameLower") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("usernameLower") + .HasComment("The username (lowercased) of the User."); + + b.HasKey("Id") + .HasName("PK_cace4a159ff9f2512dd42373760"); + + b.HasIndex(new[] { "Host" }, "IDX_3252a5df8d5bbd16b281f7799e"); + + b.HasIndex(new[] { "UsernameLower", "Host" }, "IDX_5deb01ae162d1d70b80d064c27") + .IsUnique(); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_80ca6e6ef65fb9ef34ea8c90f4"); + + b.HasIndex(new[] { "UsernameLower" }, "IDX_a27b942a0d6dcff90e3ee9b5e8"); + + b.HasIndex(new[] { "Token" }, "IDX_a854e557b1b14814750c7c7b0c") + .IsUnique(); + + b.HasIndex(new[] { "Uri" }, "IDX_be623adaa4c566baf5d29ce0c8"); + + b.HasIndex(new[] { "LastActiveDate" }, "IDX_c8cc87bd0f2f4487d17c651fbf"); + + b.HasIndex(new[] { "IsExplorable" }, "IDX_d5a1b83c7cab66f167e6888188"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e11e649824a45d8ed01d597fd9"); + + b.HasIndex(new[] { "Tags" }, "IDX_fa99d777623947a5b05f394cae"); + + b.HasIndex(new[] { "AvatarId" }, "REL_58f5c71eaab331645112cf8cfa") + .IsUnique(); + + b.HasIndex(new[] { "BannerId" }, "REL_afc64b53f8db3707ceb34eb28e") + .IsUnique(); + + b.HasIndex(new[] { "Token" }, "UQ_a854e557b1b14814750c7c7b0c9") + .IsUnique(); + + b.ToTable("user"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroup."); + + b.Property("IsPrivate") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isPrivate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of owner."); + + b.HasKey("Id") + .HasName("PK_3c29fba6fe013ec8724378ce7c9"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_20e30aa35180e317e133d75316"); + + b.HasIndex(new[] { "UserId" }, "IDX_3d6b372788ab01be58853003c9"); + + b.ToTable("user_group"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroupInvitation."); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId") + .HasComment("The group ID."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.HasKey("Id") + .HasName("PK_160c63ec02bf23f6a5c5e8140d6"); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_5cc8c468090e129857e9fecce5"); + + b.HasIndex(new[] { "UserId" }, "IDX_bfbc6305547539369fe73eb144"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_e9793f65f504e5a31fbaedbf2f") + .IsUnique(); + + b.ToTable("user_group_invitation"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvite", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_3893884af0d3a5f4d01e7921a97"); + + b.HasIndex(new[] { "UserId" }, "IDX_1039988afa3bf991185b277fe0"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_78787741f9010886796f2320a4") + .IsUnique(); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_e10924607d058004304611a436"); + + b.ToTable("user_group_invite"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroupJoining."); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId") + .HasComment("The group ID."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.HasKey("Id") + .HasName("PK_15f2425885253c5507e1599cfe7"); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_67dc758bc0566985d1b3d39986"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_d9ecaed8c6dc43f3592c229282") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_f3a1b4bd0c7cabba958a0c0b23"); + + b.ToTable("user_group_joining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("PrivateKey") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("privateKey"); + + b.Property("PublicKey") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("publicKey"); + + b.HasKey("UserId") + .HasName("PK_f4853eb41ab722fe05f81cedeb6"); + + b.ToTable("user_keypair"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserList."); + + b.Property("HideFromHomeTl") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideFromHomeTl") + .HasComment("Whether posts from list members should be hidden from the home timeline."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the UserList."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_87bab75775fd9b1ff822b656402"); + + b.HasIndex(new[] { "UserId" }, "IDX_b7fcefbdd1c18dce86687531f9"); + + b.ToTable("user_list"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserListJoining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserListJoining."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.Property("UserListId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userListId") + .HasComment("The list ID."); + + b.HasKey("Id") + .HasName("PK_11abb3768da1c5f8de101c9df45"); + + b.HasIndex(new[] { "UserListId" }, "IDX_605472305f26818cc93d1baaa7"); + + b.HasIndex(new[] { "UserId", "UserListId" }, "IDX_90f7da835e4c10aca6853621e1") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_d844bfc6f3f523a05189076efa"); + + b.ToTable("user_list_joining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserNotePining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserNotePinings."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_a6a2dad4ae000abce2ea9d9b103"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_410cd649884b501c02d6e72738") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_bfbc6f79ba4007b4ce5097f08d"); + + b.ToTable("user_note_pining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPending", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("password"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username"); + + b.HasKey("Id") + .HasName("PK_d4c84e013c98ec02d19b8fbbafa"); + + b.HasIndex(new[] { "Code" }, "IDX_4e5c4c99175638ec0761714ab0") + .IsUnique(); + + b.ToTable("user_pending"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserProfile", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("AlwaysMarkNsfw") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("alwaysMarkNsfw"); + + b.Property("AutoAcceptFollowed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("autoAcceptFollowed"); + + b.Property("Birthday") + .HasMaxLength(10) + .HasColumnType("character(10)") + .HasColumnName("birthday") + .IsFixedLength() + .HasComment("The birthday (YYYY-MM-DD) of the User."); + + b.Property("CarefulBot") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("carefulBot"); + + b.Property("ClientData") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("clientData") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The client-specific data of the User."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description (bio) of the User."); + + b.Property("Email") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email") + .HasComment("The email address of the User."); + + b.Property("EmailNotificationTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("emailNotificationTypes") + .HasDefaultValueSql("'[\"follow\", \"receiveFollowRequest\", \"groupInvited\"]'::jsonb"); + + b.Property("EmailVerified") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("emailVerified"); + + b.Property("EmailVerifyCode") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("emailVerifyCode"); + + b.Property("EnableWordMute") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableWordMute"); + + b.Property("FFVisibility") + .ValueGeneratedOnAdd() + .HasColumnType("user_profile_ffvisibility_enum") + .HasDefaultValue(UserProfile.UserProfileFFVisibility.Public) + .HasColumnName("ffVisibility"); + + b.Property("Fields") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("fields") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("InjectFeaturedNote") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("injectFeaturedNote"); + + b.Property("Integrations") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("integrations") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("Lang") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("lang"); + + b.Property("Location") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("location") + .HasComment("The location of the User."); + + b.Property("Mentions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mentions") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("ModerationNote") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("moderationNote") + .HasDefaultValueSql("''::character varying"); + + b.Property("MutedInstances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mutedInstances") + .HasDefaultValueSql("'[]'::jsonb") + .HasComment("List of instances muted by the user."); + + b.Property("MutedWords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mutedWords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property>("MutingNotificationTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("user_profile_mutingnotificationtypes_enum[]") + .HasColumnName("mutingNotificationTypes") + .HasDefaultValueSql("'{}'::public.user_profile_mutingnotificationtypes_enum[]"); + + b.Property("NoCrawle") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("noCrawle") + .HasComment("Whether reject index by crawler."); + + b.Property("Password") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("password") + .HasComment("The password hash of the User. It will be null if the origin of the user is local."); + + b.Property("PinnedPageId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pinnedPageId"); + + b.Property("PreventAiLearning") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("preventAiLearning"); + + b.Property("PublicReactions") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("publicReactions"); + + b.Property("ReceiveAnnouncementEmail") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("receiveAnnouncementEmail"); + + b.Property("Room") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("room") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The room data of the User."); + + b.Property("SecurityKeysAvailable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("securityKeysAvailable"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("twoFactorEnabled"); + + b.Property("TwoFactorSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("twoFactorSecret"); + + b.Property("TwoFactorTempSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("twoFactorTempSecret"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("Remote URL of the user."); + + b.Property("UsePasswordLessLogin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("usePasswordLessLogin"); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.HasKey("UserId") + .HasName("PK_51cb79b5555effaf7d69ba1cff9"); + + b.HasIndex(new[] { "EnableWordMute" }, "IDX_3befe6f999c86aff06eb0257b4"); + + b.HasIndex(new[] { "UserHost" }, "IDX_dce530b98e454793dac5ec2f5a"); + + b.HasIndex(new[] { "PinnedPageId" }, "UQ_6dc44f1ceb65b1e72bacef2ca27") + .IsUnique(); + + b.ToTable("user_profile"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("KeyId") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("keyId"); + + b.Property("KeyPem") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("keyPem"); + + b.HasKey("UserId") + .HasName("PK_10c146e4b39b443ede016f6736d"); + + b.HasIndex(new[] { "KeyId" }, "IDX_171e64971c780ebd23fae140bb") + .IsUnique(); + + b.ToTable("user_publickey"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserSecurityKey", b => + { + b.Property("Id") + .HasColumnType("character varying") + .HasColumnName("id") + .HasComment("Variable-length id given to navigator.credentials.get()"); + + b.Property("LastUsed") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastUsed") + .HasComment("The date of the last time the UserSecurityKey was successfully validated."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("name") + .HasComment("User-defined name for this key"); + + b.Property("PublicKey") + .IsRequired() + .HasColumnType("character varying") + .HasColumnName("publicKey") + .HasComment("Variable-length public key used to verify attestations (hex-encoded)."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_3e508571121ab39c5f85d10c166"); + + b.HasIndex(new[] { "PublicKey" }, "IDX_0d7718e562dcedd0aa5cf2c9f7"); + + b.HasIndex(new[] { "UserId" }, "IDX_ff9ca3b5f3ee3d0681367a9b44"); + + b.ToTable("user_security_key"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Webhook", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("active"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Antenna."); + + b.Property("LatestSentAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestSentAt"); + + b.Property("LatestStatus") + .HasColumnType("integer") + .HasColumnName("latestStatus"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Antenna."); + + b.Property>("On") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("on") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Secret") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("secret"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("url"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_e6765510c2d078db49632b59020"); + + b.HasIndex(new[] { "Active" }, "IDX_5a056076f76b2efe08216ba655"); + + b.HasIndex(new[] { "On" }, "IDX_8063a0586ed1dfbe86e982d961"); + + b.HasIndex(new[] { "UserId" }, "IDX_f272c8c8805969e6a6449c77b3"); + + b.ToTable("webhook"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AbuseUserReport", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Assignee") + .WithMany("AbuseUserReportAssignees") + .HasForeignKey("AssigneeId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_08b883dd5fdd6f9c4c1572b36de"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Reporter") + .WithMany("AbuseUserReportReporters") + .HasForeignKey("ReporterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_04cc96756f89d0b7f9473e8cdf3"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "TargetUser") + .WithMany("AbuseUserReportTargetUsers") + .HasForeignKey("TargetUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a9021cc2e1feb5f72d3db6e9f5f"); + + b.Navigation("Assignee"); + + b.Navigation("Reporter"); + + b.Navigation("TargetUser"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.App", "App") + .WithMany("AccessTokens") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_a3ff16c90cc87a82a0b5959e560"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AccessTokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_9949557d0e1b2c19e5344c171e9"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AnnouncementRead", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Announcement", "Announcement") + .WithMany("AnnouncementReads") + .HasForeignKey("AnnouncementId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_603a7b1e7aa0533c6c88e9bfafe"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AnnouncementReads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8288151386172b8109f7239ab28"); + + b.Navigation("Announcement"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Antenna", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", "UserGroupJoining") + .WithMany("Antennas") + .HasForeignKey("UserGroupJoiningId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_ccbf5a8c0be4511133dcc50ddeb"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Antennas") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6446c571a0e8d0f05f01c789096"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserList", "UserList") + .WithMany("Antennas") + .HasForeignKey("UserListId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_709d7d32053d0dd7620f678eeb9"); + + b.Navigation("User"); + + b.Navigation("UserGroupJoining"); + + b.Navigation("UserList"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Apps") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_3f5b0899ef90527a3462d7c2cb3"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AttestationChallenge", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AttestationChallenges") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f1a461a618fa1755692d0e0d592"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AuthSession", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.App", "App") + .WithMany("AuthSessions") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_dbe037d4bddd17b03a1dc778dee"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AuthSessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_c072b729d71697f959bde66ade0"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Blocking", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Blockee") + .WithMany("BlockingBlockees") + .HasForeignKey("BlockeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2cd4a2743a99671308f5417759e"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Blocker") + .WithMany("BlockingBlockers") + .HasForeignKey("BlockerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0627125f1a8a42c9a1929edb552"); + + b.Navigation("Blockee"); + + b.Navigation("Blocker"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Banner") + .WithMany("Channels") + .HasForeignKey("BannerId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_999da2bcc7efadbfe0e92d3bc19"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Channels") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_823bae55bd81b3be6e05cff4383"); + + b.Navigation("Banner"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelFollowing", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Followee") + .WithMany("ChannelFollowings") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e43068c3f92cab197c3d3cd86e"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("ChannelFollowings") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6d8084ec9496e7334a4602707e1"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelNotePining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Channel") + .WithMany("ChannelNotePinings") + .HasForeignKey("ChannelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8125f950afd3093acb10d2db8a8"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("ChannelNotePinings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_10b19ef67d297ea9de325cd4502"); + + b.Navigation("Channel"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Clips") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2b5ec6c574d6802c94c80313fb2"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ClipNote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Clip", "Clip") + .WithMany("ClipNotes") + .HasForeignKey("ClipId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ebe99317bbbe9968a0c6f579adf"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("ClipNotes") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a012eaf5c87c65da1deb5fdbfa3"); + + b.Navigation("Clip"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", "Folder") + .WithMany("DriveFiles") + .HasForeignKey("FolderId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_bb90d1956dafc4068c28aa7560a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("DriveFiles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_860fa6f6c7df5bb887249fba22e"); + + b.Navigation("Folder"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", "Parent") + .WithMany("InverseParent") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_00ceffb0cdc238b3233294f08f2"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("DriveFolders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_f4fc06e49c0171c85f1c48060d2"); + + b.Navigation("Parent"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Followee") + .WithMany("FollowRequestFollowees") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_12c01c0d1a79f77d9f6c15fadd2"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("FollowRequestFollowers") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a7fd92dd6dc519e6fb435dd108f"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Following", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Followee") + .WithMany("FollowingFollowees") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_24e0042143a18157b234df186c3"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("FollowingFollowers") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6516c5a6f3c015b4eed39978be5"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryLike", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", "Post") + .WithMany("GalleryLikes") + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b1cb568bfe569e47b7051699fc8"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("GalleryLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8fd5215095473061855ceb948cf"); + + b.Navigation("Post"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("GalleryPosts") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_985b836dddd8615e432d7043ddb"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("HtmlNoteCacheEntry") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6ef86ec901b2017cbe82d3a8286"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("HtmlUserCacheEntry") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_920b9474e3c9cae3f3c37c057e1"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.MessagingMessage", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "File") + .WithMany("MessagingMessages") + .HasForeignKey("FileId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_535def119223ac05ad3fa9ef64b"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "Group") + .WithMany("MessagingMessages") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_2c4be03b446884f9e9c502135be"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Recipient") + .WithMany("MessagingMessageRecipients") + .HasForeignKey("RecipientId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_cac14a4e3944454a5ce7daa5142"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("MessagingMessageUsers") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5377c307783fce2b6d352e1203b"); + + b.Navigation("File"); + + b.Navigation("Group"); + + b.Navigation("Recipient"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ModerationLog", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("ModerationLogs") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a08ad074601d204e0f69da9a954"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Muting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Mutee") + .WithMany("MutingMutees") + .HasForeignKey("MuteeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ec96b4fed9dae517e0dbbe0675c"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Muter") + .WithMany("MutingMuters") + .HasForeignKey("MuterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_93060675b4a79a577f31d260c67"); + + b.Navigation("Mutee"); + + b.Navigation("Muter"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Channel") + .WithMany("Notes") + .HasForeignKey("ChannelId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_f22169eb10657bded6d875ac8f9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Renote") + .WithMany("InverseRenote") + .HasForeignKey("RenoteId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_52ccc804d7c69037d558bac4c96"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Reply") + .WithMany("InverseReply") + .HasForeignKey("ReplyId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_17cb3553c700a4985dff5a30ff5"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Notes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5b87d9d19127bd5d92026017a7b"); + + b.Navigation("Channel"); + + b.Navigation("Renote"); + + b.Navigation("Reply"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteEdit", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteEdits") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_702ad5ae993a672e4fbffbcd38c"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteFavorite", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteFavorites") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e00498f180193423c992bc4370"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteFavorites") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_47f4b1892f5d6ba8efb3057d81a"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteReaction", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteReactions") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_45145e4953780f3cd5656f0ea6a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteReactions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_13761f64257f40c5636d0ff95ee"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteThreadMuting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteThreadMutings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_29c11c7deb06615076f8c95b80a"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteUnread", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteUnreads") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e637cba4dc4410218c4251260e4"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteUnreads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_56b0166d34ddae49d8ef7610bb9"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteWatching", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteWatchings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_03e7028ab8388a3f5e3ce2a8619"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteWatchings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b0134ec406e8d09a540f8182888"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Notification", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.AccessToken", "AppAccessToken") + .WithMany("Notifications") + .HasForeignKey("AppAccessTokenId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_e22bf6bda77b6adc1fd9e75c8c9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", "FollowRequest") + .WithMany("Notifications") + .HasForeignKey("FollowRequestId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_bd7fab507621e635b32cd31892c"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("Notifications") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_769cb6b73a1efe22ddf733ac453"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Notifiee") + .WithMany("NotificationNotifiees") + .HasForeignKey("NotifieeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3c601b70a1066d2c8b517094cb9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Notifier") + .WithMany("NotificationNotifiers") + .HasForeignKey("NotifierId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_3b4e96eec8d36a8bbb9d02aa710"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", "UserGroupInvitation") + .WithMany("Notifications") + .HasForeignKey("UserGroupInvitationId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_8fe87814e978053a53b1beb7e98"); + + b.Navigation("AppAccessToken"); + + b.Navigation("FollowRequest"); + + b.Navigation("Note"); + + b.Navigation("Notifiee"); + + b.Navigation("Notifier"); + + b.Navigation("UserGroupInvitation"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthToken", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.OauthApp", "App") + .WithMany("OauthTokens") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6d3ef28ea647b1449ba79690874"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("OauthTokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f6b4b1ac66b753feab5d831ba04"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "EyeCatchingImage") + .WithMany("Pages") + .HasForeignKey("EyeCatchingImageId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_a9ca79ad939bf06066b81c9d3aa"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Pages") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ae1d917992dd0c9d9bbdad06c4a"); + + b.Navigation("EyeCatchingImage"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PageLike", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Page", "Page") + .WithMany("PageLikes") + .HasForeignKey("PageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_cf8782626dced3176038176a847"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PageLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e61efab7f88dbb79c9166dbb48"); + + b.Navigation("Page"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PasswordResetRequest", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PasswordResetRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_4bb7fd4a34492ae0e6cc8d30ac8"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Poll", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("Poll") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.Poll", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_da851e06d0dfe2ef397d8b1bf1b"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PollVote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("PollVotes") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_aecfbd5ef60374918e63ee95fa7"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PollVotes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_66d2bd2ee31d14bcc23069a89f8"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoNote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("PromoNote") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.PromoNote", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e263909ca4fe5d57f8d4230dd5c"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoRead", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("PromoReads") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a46a1a603ecee695d7db26da5f4"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PromoReads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_9657d55550c3d37bfafaf7d4b05"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistryItem", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("RegistryItems") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_fb9d21ba0abb83223263df6bcb3"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RenoteMuting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Mutee") + .WithMany("RenoteMutingMutees") + .HasForeignKey("MuteeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_7eac97594bcac5ffcf2068089b6"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Muter") + .WithMany("RenoteMutingMuters") + .HasForeignKey("MuterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_7aa72a5fe76019bfe8e5e0e8b7d"); + + b.Navigation("Mutee"); + + b.Navigation("Muter"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Session", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Sessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3d2f174ef04fb312fdebd0ddc53"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Signin", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Signins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2c308dbdc50d94dc625670055f7"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.SwSubscription", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("SwSubscriptions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_97754ca6f2baff9b4abb7f853dd"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Avatar") + .WithOne("UserAvatar") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.User", "AvatarId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_58f5c71eaab331645112cf8cfa5"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Banner") + .WithOne("UserBanner") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.User", "BannerId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_afc64b53f8db3707ceb34eb28e2"); + + b.Navigation("Avatar"); + + b.Navigation("Banner"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroups") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3d6b372788ab01be58853003c93"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupInvitations") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5cc8c468090e129857e9fecce5a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupInvitations") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_bfbc6305547539369fe73eb144a"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvite", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupInvites") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e10924607d058004304611a436a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupInvites") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_1039988afa3bf991185b277fe03"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupJoinings") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_67dc758bc0566985d1b3d399865"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupJoinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f3a1b4bd0c7cabba958a0c0b231"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserKeypair") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f4853eb41ab722fe05f81cedeb6"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserLists") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b7fcefbdd1c18dce86687531f99"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserListJoining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserListJoinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_d844bfc6f3f523a05189076efaa"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserList", "UserList") + .WithMany("UserListJoinings") + .HasForeignKey("UserListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_605472305f26818cc93d1baaa74"); + + b.Navigation("User"); + + b.Navigation("UserList"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserNotePining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("UserNotePinings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_68881008f7c3588ad7ecae471cf"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserNotePinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_bfbc6f79ba4007b4ce5097f08d6"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserProfile", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Page", "PinnedPage") + .WithOne("UserProfile") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserProfile", "PinnedPageId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_6dc44f1ceb65b1e72bacef2ca27"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserProfile") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserProfile", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_51cb79b5555effaf7d69ba1cff9"); + + b.Navigation("PinnedPage"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserPublickey") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_10c146e4b39b443ede016f6736d"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserSecurityKey", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserSecurityKeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ff9ca3b5f3ee3d0681367a9b447"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Webhook", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Webhooks") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f272c8c8805969e6a6449c77b3c"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Announcement", b => + { + b.Navigation("AnnouncementReads"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.Navigation("AccessTokens"); + + b.Navigation("AuthSessions"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.Navigation("ChannelFollowings"); + + b.Navigation("ChannelNotePinings"); + + b.Navigation("Notes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.Navigation("ClipNotes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.Navigation("Channels"); + + b.Navigation("MessagingMessages"); + + b.Navigation("Pages"); + + b.Navigation("UserAvatar"); + + b.Navigation("UserBanner"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.Navigation("DriveFiles"); + + b.Navigation("InverseParent"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.Navigation("GalleryLikes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.Navigation("ChannelNotePinings"); + + b.Navigation("ClipNotes"); + + b.Navigation("HtmlNoteCacheEntry"); + + b.Navigation("InverseRenote"); + + b.Navigation("InverseReply"); + + b.Navigation("NoteEdits"); + + b.Navigation("NoteFavorites"); + + b.Navigation("NoteReactions"); + + b.Navigation("NoteUnreads"); + + b.Navigation("NoteWatchings"); + + b.Navigation("Notifications"); + + b.Navigation("Poll"); + + b.Navigation("PollVotes"); + + b.Navigation("PromoNote"); + + b.Navigation("PromoReads"); + + b.Navigation("UserNotePinings"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthApp", b => + { + b.Navigation("OauthTokens"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.Navigation("PageLikes"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.Navigation("AbuseUserReportAssignees"); + + b.Navigation("AbuseUserReportReporters"); + + b.Navigation("AbuseUserReportTargetUsers"); + + b.Navigation("AccessTokens"); + + b.Navigation("AnnouncementReads"); + + b.Navigation("Antennas"); + + b.Navigation("Apps"); + + b.Navigation("AttestationChallenges"); + + b.Navigation("AuthSessions"); + + b.Navigation("BlockingBlockees"); + + b.Navigation("BlockingBlockers"); + + b.Navigation("ChannelFollowings"); + + b.Navigation("Channels"); + + b.Navigation("Clips"); + + b.Navigation("DriveFiles"); + + b.Navigation("DriveFolders"); + + b.Navigation("FollowRequestFollowees"); + + b.Navigation("FollowRequestFollowers"); + + b.Navigation("FollowingFollowees"); + + b.Navigation("FollowingFollowers"); + + b.Navigation("GalleryLikes"); + + b.Navigation("GalleryPosts"); + + b.Navigation("HtmlUserCacheEntry"); + + b.Navigation("MessagingMessageRecipients"); + + b.Navigation("MessagingMessageUsers"); + + b.Navigation("ModerationLogs"); + + b.Navigation("MutingMutees"); + + b.Navigation("MutingMuters"); + + b.Navigation("NoteFavorites"); + + b.Navigation("NoteReactions"); + + b.Navigation("NoteThreadMutings"); + + b.Navigation("NoteUnreads"); + + b.Navigation("NoteWatchings"); + + b.Navigation("Notes"); + + b.Navigation("NotificationNotifiees"); + + b.Navigation("NotificationNotifiers"); + + b.Navigation("OauthTokens"); + + b.Navigation("PageLikes"); + + b.Navigation("Pages"); + + b.Navigation("PasswordResetRequests"); + + b.Navigation("PollVotes"); + + b.Navigation("PromoReads"); + + b.Navigation("RegistryItems"); + + b.Navigation("RenoteMutingMutees"); + + b.Navigation("RenoteMutingMuters"); + + b.Navigation("Sessions"); + + b.Navigation("Signins"); + + b.Navigation("SwSubscriptions"); + + b.Navigation("UserGroupInvitations"); + + b.Navigation("UserGroupInvites"); + + b.Navigation("UserGroupJoinings"); + + b.Navigation("UserGroups"); + + b.Navigation("UserKeypair"); + + b.Navigation("UserListJoinings"); + + b.Navigation("UserLists"); + + b.Navigation("UserNotePinings"); + + b.Navigation("UserProfile"); + + b.Navigation("UserPublickey"); + + b.Navigation("UserSecurityKeys"); + + b.Navigation("Webhooks"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.Navigation("MessagingMessages"); + + b.Navigation("UserGroupInvitations"); + + b.Navigation("UserGroupInvites"); + + b.Navigation("UserGroupJoinings"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.Navigation("Antennas"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.Navigation("Antennas"); + + b.Navigation("UserListJoinings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.cs b/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.cs new file mode 100644 index 00000000..b8ccefd5 --- /dev/null +++ b/Iceshrimp.Backend/Core/Database/Migrations/20240107171910_Initial.cs @@ -0,0 +1,3487 @@ +using System; +using System.Collections.Generic; +using Iceshrimp.Backend.Core.Database.Tables; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Iceshrimp.Backend.Core.Database.Migrations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:antenna_src_enum", "home,all,users,list,group,instances") + .Annotation("Npgsql:Enum:log_level_enum", "error,warning,info,success,debug") + .Annotation("Npgsql:Enum:note_visibility_enum", "public,home,followers,specified,hidden") + .Annotation("Npgsql:Enum:notification_type_enum", "follow,mention,reply,renote,quote,reaction,pollVote,pollEnded,receiveFollowRequest,followRequestAccepted,groupInvited,app") + .Annotation("Npgsql:Enum:page_visibility_enum", "public,followers,specified") + .Annotation("Npgsql:Enum:poll_notevisibility_enum", "public,home,followers,specified,hidden") + .Annotation("Npgsql:Enum:relay_status_enum", "requesting,accepted,rejected") + .Annotation("Npgsql:Enum:user_profile_ffvisibility_enum", "public,followers,private") + .Annotation("Npgsql:Enum:user_profile_mutingnotificationtypes_enum", "follow,mention,reply,renote,quote,reaction,pollVote,pollEnded,receiveFollowRequest,followRequestAccepted,groupInvited,app") + .Annotation("Npgsql:PostgresExtension:pg_trgm", ",,"); + + migrationBuilder.CreateTable( + name: "announcement", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Announcement."), + text = table.Column(type: "character varying(8192)", maxLength: 8192, nullable: false), + title = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + imageUrl = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true, comment: "The updated date of the Announcement."), + showPopup = table.Column(type: "boolean", nullable: false, defaultValue: false), + isGoodNews = table.Column(type: "boolean", nullable: false, defaultValue: false) + }, + constraints: table => + { + table.PrimaryKey("PK_e0ef0550174fd1099a308fd18a0", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "emoji", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + host = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + originalUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), + uri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + type = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + aliases = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + category = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + publicUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, defaultValueSql: "''::character varying"), + license = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + width = table.Column(type: "integer", nullable: true, comment: "Image width"), + height = table.Column(type: "integer", nullable: true, comment: "Image height") + }, + constraints: table => + { + table.PrimaryKey("PK_df74ce05e24999ee01ea0bc50a3", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "hashtag", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + mentionedUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + mentionedUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + mentionedLocalUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + mentionedLocalUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + mentionedRemoteUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + mentionedRemoteUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + attachedUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + attachedUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + attachedLocalUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + attachedLocalUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + attachedRemoteUserIds = table.Column>(type: "character varying(32)[]", nullable: false), + attachedRemoteUsersCount = table.Column(type: "integer", nullable: false, defaultValue: 0) + }, + constraints: table => + { + table.PrimaryKey("PK_cb36eb8af8412bfa978f1165d78", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "instance", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + caughtAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The caught date of the Instance."), + host = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The host of the Instance."), + usersCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of the users of the Instance."), + notesCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of the notes of the Instance."), + followingCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + followersCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + latestRequestSentAt = table.Column(type: "timestamp with time zone", nullable: true), + latestStatus = table.Column(type: "integer", nullable: true), + latestRequestReceivedAt = table.Column(type: "timestamp with time zone", nullable: true), + lastCommunicatedAt = table.Column(type: "timestamp with time zone", nullable: false), + isNotResponding = table.Column(type: "boolean", nullable: false, defaultValue: false), + softwareName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true, comment: "The software of the Instance."), + softwareVersion = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + openRegistrations = table.Column(type: "boolean", nullable: true), + name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + description = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: true), + maintainerName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + maintainerEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + infoUpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), + isSuspended = table.Column(type: "boolean", nullable: false, defaultValue: false), + iconUrl = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: true), + themeColor = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + faviconUrl = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_eaf60e4a0c399c9935413e06474", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "meta", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + description = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + maintainerName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + maintainerEmail = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + disableRegistration = table.Column(type: "boolean", nullable: false, defaultValue: false), + disableLocalTimeline = table.Column(type: "boolean", nullable: false, defaultValue: false), + disableGlobalTimeline = table.Column(type: "boolean", nullable: false, defaultValue: false), + langs = table.Column>(type: "character varying(64)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + hiddenTags = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + blockedHosts = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + mascotImageUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'/static-assets/badges/info.png'::character varying"), + bannerUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + errorImageUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'/static-assets/badges/error.png'::character varying"), + iconUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + cacheRemoteFiles = table.Column(type: "boolean", nullable: false, defaultValue: false), + enableRecaptcha = table.Column(type: "boolean", nullable: false, defaultValue: false), + recaptchaSiteKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + recaptchaSecretKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + localDriveCapacityMb = table.Column(type: "integer", nullable: false, defaultValue: 1024, comment: "Drive capacity of a local user (MB)"), + remoteDriveCapacityMb = table.Column(type: "integer", nullable: false, defaultValue: 32, comment: "Drive capacity of a remote user (MB)"), + summalyProxy = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + enableEmail = table.Column(type: "boolean", nullable: false, defaultValue: false), + email = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + smtpSecure = table.Column(type: "boolean", nullable: false, defaultValue: false), + smtpHost = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + smtpPort = table.Column(type: "integer", nullable: true), + smtpUser = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + smtpPass = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + swPublicKey = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + swPrivateKey = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + enableGithubIntegration = table.Column(type: "boolean", nullable: false, defaultValue: false), + githubClientId = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + githubClientSecret = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + enableDiscordIntegration = table.Column(type: "boolean", nullable: false, defaultValue: false), + discordClientId = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + discordClientSecret = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + pinnedUsers = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + ToSUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + repositoryUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, defaultValueSql: "'https://iceshrimp.dev/iceshrimp/iceshrimp'::character varying"), + feedbackUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'https://iceshrimp.dev/iceshrimp/iceshrimp/issues/new'::character varying"), + useObjectStorage = table.Column(type: "boolean", nullable: false, defaultValue: false), + objectStorageBucket = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStoragePrefix = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStorageBaseUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStorageEndpoint = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStorageRegion = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStorageAccessKey = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStorageSecretKey = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + objectStoragePort = table.Column(type: "integer", nullable: true), + objectStorageUseSSL = table.Column(type: "boolean", nullable: false, defaultValue: true), + objectStorageUseProxy = table.Column(type: "boolean", nullable: false, defaultValue: true), + enableHcaptcha = table.Column(type: "boolean", nullable: false, defaultValue: false), + hcaptchaSiteKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + hcaptchaSecretKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + objectStorageSetPublicRead = table.Column(type: "boolean", nullable: false, defaultValue: false), + pinnedPages = table.Column>(type: "character varying(512)[]", nullable: false, defaultValueSql: "'{/featured,/channels,/explore,/pages,/about-iceshrimp}'::character varying[]"), + backgroundImageUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + logoImageUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + pinnedClipId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + objectStorageS3ForcePathStyle = table.Column(type: "boolean", nullable: false, defaultValue: true), + allowedHosts = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + secureMode = table.Column(type: "boolean", nullable: false, defaultValue: true), + privateMode = table.Column(type: "boolean", nullable: false, defaultValue: false), + deeplAuthKey = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + deeplIsPro = table.Column(type: "boolean", nullable: false, defaultValue: false), + emailRequiredForSignup = table.Column(type: "boolean", nullable: false, defaultValue: false), + themeColor = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + defaultLightTheme = table.Column(type: "character varying(8192)", maxLength: 8192, nullable: true), + defaultDarkTheme = table.Column(type: "character varying(8192)", maxLength: 8192, nullable: true), + enableIpLogging = table.Column(type: "boolean", nullable: false, defaultValue: false), + enableActiveEmailValidation = table.Column(type: "boolean", nullable: false, defaultValue: true), + customMOTD = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + customSplashIcons = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + disableRecommendedTimeline = table.Column(type: "boolean", nullable: false, defaultValue: true), + recommendedInstances = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + defaultReaction = table.Column(type: "character varying(256)", maxLength: 256, nullable: false, defaultValueSql: "'⭐'::character varying"), + libreTranslateApiUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + libreTranslateApiKey = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + silencedHosts = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + experimentalFeatures = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"), + enableServerMachineStats = table.Column(type: "boolean", nullable: false, defaultValue: false), + enableIdenticonGeneration = table.Column(type: "boolean", nullable: false, defaultValue: true), + donationLink = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + autofollowedAccount = table.Column(type: "character varying(128)", maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_c4c17a6c2bd7651338b60fc590b", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "oauth_app", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth application"), + clientId = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The client id of the OAuth application"), + clientSecret = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The client secret of the OAuth application"), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the OAuth application"), + website = table.Column(type: "character varying(256)", maxLength: 256, nullable: true, comment: "The website of the OAuth application"), + scopes = table.Column>(type: "character varying(64)[]", nullable: false, comment: "The scopes requested by the OAuth application"), + redirectUris = table.Column>(type: "character varying(512)[]", nullable: false, comment: "The redirect URIs of the OAuth application") + }, + constraints: table => + { + table.PrimaryKey("PK_3256b97c0a3ee2d67240805dca4", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "registration_ticket", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + code = table.Column(type: "character varying(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_f11696b6fafcf3662d4292734f8", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "relay", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + inbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), + status = table.Column(type: "relay_status_enum", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_78ebc9cfddf4292633b7ba57aee", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "used_username", + columns: table => new + { + username = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_78fd79d2d24c6ac2f4cc9a31a5d", x => x.username); + }); + + migrationBuilder.CreateTable( + name: "user_pending", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + code = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + username = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + email = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + password = table.Column(type: "character varying(128)", maxLength: 128, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_d4c84e013c98ec02d19b8fbbafa", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "abuse_user_report", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the AbuseUserReport."), + targetUserId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + reporterId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + assigneeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + resolved = table.Column(type: "boolean", nullable: false, defaultValue: false), + comment = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: false), + targetUserHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + reporterHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + forwarded = table.Column(type: "boolean", nullable: false, defaultValue: false) + }, + constraints: table => + { + table.PrimaryKey("PK_87873f5f5cc5c321a1306b2d18c", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "access_token", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the AccessToken."), + token = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + hash = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + appId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + lastUsedAt = table.Column(type: "timestamp with time zone", nullable: true), + session = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + description = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + iconUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + permission = table.Column>(type: "character varying(64)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + fetched = table.Column(type: "boolean", nullable: false, defaultValue: false) + }, + constraints: table => + { + table.PrimaryKey("PK_f20f028607b2603deabd8182d12", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "announcement_read", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + announcementId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the AnnouncementRead.") + }, + constraints: table => + { + table.PrimaryKey("PK_4b90ad1f42681d97b2683890c5e", x => x.id); + table.ForeignKey( + name: "FK_603a7b1e7aa0533c6c88e9bfafe", + column: x => x.announcementId, + principalTable: "announcement", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "antenna", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Antenna."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Antenna."), + src = table.Column(type: "antenna_src_enum", nullable: false), + userListId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + keywords = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + withFile = table.Column(type: "boolean", nullable: false), + expression = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + notify = table.Column(type: "boolean", nullable: false), + caseSensitive = table.Column(type: "boolean", nullable: false, defaultValue: false), + withReplies = table.Column(type: "boolean", nullable: false, defaultValue: false), + userGroupJoiningId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + users = table.Column>(type: "character varying(1024)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + excludeKeywords = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + instances = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb") + }, + constraints: table => + { + table.PrimaryKey("PK_c170b99775e1dccca947c9f2d5f", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "app", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the App."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."), + secret = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The secret key of the App."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the App."), + description = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The description of the App."), + permission = table.Column>(type: "character varying(64)[]", nullable: false, comment: "The permission of the App."), + callbackUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The callbackUrl of the App.") + }, + constraints: table => + { + table.PrimaryKey("PK_9478629fc093d229df09e560aea", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "attestation_challenge", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + challenge = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "Hex-encoded sha256 hash of the challenge."), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The date challenge was created for expiry purposes."), + registrationChallenge = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Indicates that the challenge is only for registration purposes if true to prevent the challenge for being used as authentication.") + }, + constraints: table => + { + table.PrimaryKey("PK_d0ba6786e093f1bcb497572a6b5", x => new { x.id, x.userId }); + }); + + migrationBuilder.CreateTable( + name: "auth_session", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the AuthSession."), + token = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + appId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_19354ed146424a728c1112a8cbf", x => x.id); + table.ForeignKey( + name: "FK_dbe037d4bddd17b03a1dc778dee", + column: x => x.appId, + principalTable: "app", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "blocking", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Blocking."), + blockeeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The blockee user ID."), + blockerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The blocker user ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_e5d9a541cc1965ee7e048ea09dd", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "channel", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Channel."), + lastNotedAt = table.Column(type: "timestamp with time zone", nullable: true), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Channel."), + description = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true, comment: "The description of the Channel."), + bannerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of banner Channel."), + notesCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of notes."), + usersCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of users.") + }, + constraints: table => + { + table.PrimaryKey("PK_590f33ee6ee7d76437acf362e39", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "channel_following", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the ChannelFollowing."), + followeeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee channel ID."), + followerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The follower user ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_8b104be7f7415113f2a02cd5bdd", x => x.id); + table.ForeignKey( + name: "FK_0e43068c3f92cab197c3d3cd86e", + column: x => x.followeeId, + principalTable: "channel", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "channel_note_pining", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the ChannelNotePining."), + channelId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_44f7474496bcf2e4b741681146d", x => x.id); + table.ForeignKey( + name: "FK_8125f950afd3093acb10d2db8a8", + column: x => x.channelId, + principalTable: "channel", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "clip", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Clip."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Clip."), + isPublic = table.Column(type: "boolean", nullable: false, defaultValue: false), + description = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true, comment: "The description of the Clip.") + }, + constraints: table => + { + table.PrimaryKey("PK_f0685dac8d4dd056d7255670b75", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "clip_note", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The note ID."), + clipId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The clip ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_e94cda2f40a99b57e032a1a738b", x => x.id); + table.ForeignKey( + name: "FK_ebe99317bbbe9968a0c6f579adf", + column: x => x.clipId, + principalTable: "clip", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "drive_file", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the DriveFile."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."), + userHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The host of owner. It will be null if the user in local."), + md5 = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The MD5 hash of the DriveFile."), + name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false, comment: "The file name of the DriveFile."), + type = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The content type (MIME) of the DriveFile."), + size = table.Column(type: "integer", nullable: false, comment: "The file size (bytes) of the DriveFile."), + comment = table.Column(type: "character varying(8192)", maxLength: 8192, nullable: true, comment: "The comment of the DriveFile."), + properties = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The any properties of the DriveFile. For example, it includes image width/height."), + storedInternal = table.Column(type: "boolean", nullable: false), + url = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The URL of the DriveFile."), + thumbnailUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the thumbnail of the DriveFile."), + webpublicUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the webpublic of the DriveFile."), + accessKey = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + thumbnailAccessKey = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + webpublicAccessKey = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + uri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of the DriveFile. it will be null when the DriveFile is local."), + src = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + folderId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The parent folder ID. If null, it means the DriveFile is located in root."), + isSensitive = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the DriveFile is NSFW."), + isLink = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the DriveFile is direct link to remote server."), + blurhash = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The BlurHash string."), + webpublicType = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + requestHeaders = table.Column(type: "jsonb", nullable: true, defaultValueSql: "'{}'::jsonb"), + requestIp = table.Column(type: "character varying(128)", maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_43ddaaaf18c9e68029b7cbb032e", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "user", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the User."), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true, comment: "The updated date of the User."), + lastFetchedAt = table.Column(type: "timestamp with time zone", nullable: true), + username = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The username of the User."), + usernameLower = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The username (lowercased) of the User."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The name of the User."), + followersCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of followers."), + followingCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of following."), + notesCount = table.Column(type: "integer", nullable: false, defaultValue: 0, comment: "The count of notes."), + avatarId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of avatar DriveFile."), + bannerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of banner DriveFile."), + tags = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + isSuspended = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is suspended."), + isSilenced = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is silenced."), + isLocked = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is locked."), + isBot = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a bot."), + isCat = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a cat."), + isAdmin = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is the admin."), + isModerator = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a moderator."), + emojis = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + host = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The host of the User. It will be null if the origin of the user is local."), + inbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The inbox URL of the User. It will be null if the origin of the user is local."), + sharedInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The sharedInbox URL of the User. It will be null if the origin of the user is local."), + featured = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The featured URL of the User. It will be null if the origin of the user is local."), + uri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of the User. It will be null if the origin of the user is local."), + token = table.Column(type: "character(16)", fixedLength: true, maxLength: 16, nullable: true, comment: "The native access token of the User. It will be null if the origin of the user is local."), + isExplorable = table.Column(type: "boolean", nullable: false, defaultValue: true, comment: "Whether the User is explorable."), + followersUri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of the user Follower Collection. It will be null if the origin of the user is local."), + lastActiveDate = table.Column(type: "timestamp with time zone", nullable: true), + hideOnlineStatus = table.Column(type: "boolean", nullable: false, defaultValue: false), + isDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is deleted."), + driveCapacityOverrideMb = table.Column(type: "integer", nullable: true, comment: "Overrides user drive capacity limit"), + movedToUri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of the new account of the User"), + alsoKnownAs = table.Column(type: "text", nullable: true, comment: "URIs the user is known as too"), + speakAsCat = table.Column(type: "boolean", nullable: false, defaultValue: true, comment: "Whether to speak as a cat if isCat."), + avatarUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the avatar DriveFile"), + avatarBlurhash = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The blurhash of the avatar DriveFile"), + bannerUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the banner DriveFile"), + bannerBlurhash = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The blurhash of the banner DriveFile") + }, + constraints: table => + { + table.PrimaryKey("PK_cace4a159ff9f2512dd42373760", x => x.id); + table.ForeignKey( + name: "FK_58f5c71eaab331645112cf8cfa5", + column: x => x.avatarId, + principalTable: "drive_file", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_afc64b53f8db3707ceb34eb28e2", + column: x => x.bannerId, + principalTable: "drive_file", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "drive_folder", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the DriveFolder."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the DriveFolder."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."), + parentId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The parent folder ID. If null, it means the DriveFolder is located in root.") + }, + constraints: table => + { + table.PrimaryKey("PK_7a0c089191f5ebdc214e0af808a", x => x.id); + table.ForeignKey( + name: "FK_00ceffb0cdc238b3233294f08f2", + column: x => x.parentId, + principalTable: "drive_folder", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_f4fc06e49c0171c85f1c48060d2", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "follow_request", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the FollowRequest."), + followeeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee user ID."), + followerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The follower user ID."), + requestId = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "id of Follow Activity."), + followerHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followerInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followerSharedInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeSharedInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_53a9aa3725f7a3deb150b39dbfc", x => x.id); + table.ForeignKey( + name: "FK_12c01c0d1a79f77d9f6c15fadd2", + column: x => x.followeeId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_a7fd92dd6dc519e6fb435dd108f", + column: x => x.followerId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "following", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Following."), + followeeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee user ID."), + followerId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The follower user ID."), + followerHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followerInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followerSharedInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + followeeSharedInbox = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_c76c6e044bdf76ecf8bfb82a645", x => x.id); + table.ForeignKey( + name: "FK_24e0042143a18157b234df186c3", + column: x => x.followeeId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_6516c5a6f3c015b4eed39978be5", + column: x => x.followerId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "gallery_post", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the GalleryPost."), + updatedAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The updated date of the GalleryPost."), + title = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + description = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."), + fileIds = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + isSensitive = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the post is sensitive."), + likedCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + tags = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]") + }, + constraints: table => + { + table.PrimaryKey("PK_8e90d7b6015f2c4518881b14753", x => x.id); + table.ForeignKey( + name: "FK_985b836dddd8615e432d7043ddb", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "html_user_cache_entry", + columns: table => new + { + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true), + bio = table.Column(type: "text", nullable: true), + fields = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb") + }, + constraints: table => + { + table.PrimaryKey("PK_920b9474e3c9cae3f3c37c057e1", x => x.userId); + table.ForeignKey( + name: "FK_920b9474e3c9cae3f3c37c057e1", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "moderation_log", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the ModerationLog."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + type = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + info = table.Column(type: "jsonb", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_d0adca6ecfd068db83e4526cc26", x => x.id); + table.ForeignKey( + name: "FK_a08ad074601d204e0f69da9a954", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "muting", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Muting."), + muteeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The mutee user ID."), + muterId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The muter user ID."), + expiresAt = table.Column(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_2e92d06c8b5c602eeb27ca9ba48", x => x.id); + table.ForeignKey( + name: "FK_93060675b4a79a577f31d260c67", + column: x => x.muterId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ec96b4fed9dae517e0dbbe0675c", + column: x => x.muteeId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Note."), + replyId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of reply target."), + renoteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of renote target."), + text = table.Column(type: "text", nullable: true), + name = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + cw = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."), + visibility = table.Column(type: "note_visibility_enum", nullable: false), + localOnly = table.Column(type: "boolean", nullable: false, defaultValue: false), + renoteCount = table.Column(type: "smallint", nullable: false, defaultValue: (short)0), + repliesCount = table.Column(type: "smallint", nullable: false, defaultValue: (short)0), + reactions = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"), + uri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of a note. it will be null when the note is local."), + score = table.Column(type: "integer", nullable: false, defaultValue: 0), + fileIds = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + attachedFileTypes = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + visibleUserIds = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + mentions = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + mentionedRemoteUsers = table.Column(type: "text", nullable: false, defaultValueSql: "'[]'::text"), + emojis = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + tags = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + hasPoll = table.Column(type: "boolean", nullable: false, defaultValue: false), + userHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + replyUserId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "[Denormalized]"), + replyUserHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + renoteUserId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "[Denormalized]"), + renoteUserHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + url = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The human readable url of a note. it will be null when the note is local."), + channelId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of source channel."), + threadId = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true, comment: "The updated date of the Note.") + }, + constraints: table => + { + table.PrimaryKey("PK_96d0c172a4fba276b1bbed43058", x => x.id); + table.ForeignKey( + name: "FK_17cb3553c700a4985dff5a30ff5", + column: x => x.replyId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_52ccc804d7c69037d558bac4c96", + column: x => x.renoteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_5b87d9d19127bd5d92026017a7b", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_f22169eb10657bded6d875ac8f9", + column: x => x.channelId, + principalTable: "channel", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_thread_muting", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + threadId = table.Column(type: "character varying(256)", maxLength: 256, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ec5936d94d1a0369646d12a3a47", x => x.id); + table.ForeignKey( + name: "FK_29c11c7deb06615076f8c95b80a", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "oauth_token", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth token"), + appId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + code = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The auth code for the OAuth token"), + token = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The OAuth token"), + active = table.Column(type: "boolean", nullable: false, comment: "Whether or not the token has been activated"), + scopes = table.Column>(type: "character varying(64)[]", nullable: false, comment: "The scopes requested by the OAuth token"), + redirectUri = table.Column(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The redirect URI of the OAuth token") + }, + constraints: table => + { + table.PrimaryKey("PK_7e6a25a3cc4395d1658f5b89c73", x => x.id); + table.ForeignKey( + name: "FK_6d3ef28ea647b1449ba79690874", + column: x => x.appId, + principalTable: "oauth_app", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_f6b4b1ac66b753feab5d831ba04", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "page", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Page."), + updatedAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The updated date of the Page."), + title = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + visibility = table.Column(type: "page_visibility_enum", nullable: false), + summary = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + alignCenter = table.Column(type: "boolean", nullable: false), + font = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."), + eyeCatchingImageId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + content = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + variables = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + visibleUserIds = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + likedCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + hideTitleWhenPinned = table.Column(type: "boolean", nullable: false, defaultValue: false), + script = table.Column(type: "character varying(16384)", maxLength: 16384, nullable: false, defaultValueSql: "''::character varying"), + isPublic = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_742f4117e065c5b6ad21b37ba1f", x => x.id); + table.ForeignKey( + name: "FK_a9ca79ad939bf06066b81c9d3aa", + column: x => x.eyeCatchingImageId, + principalTable: "drive_file", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ae1d917992dd0c9d9bbdad06c4a", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "password_reset_request", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + token = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_fcf4b02eae1403a2edaf87fd074", x => x.id); + table.ForeignKey( + name: "FK_4bb7fd4a34492ae0e6cc8d30ac8", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "registry_item", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the RegistryItem."), + updatedAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The updated date of the RegistryItem."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."), + key = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false, comment: "The key of the RegistryItem."), + scope = table.Column>(type: "character varying(1024)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + domain = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + value = table.Column(type: "jsonb", nullable: true, defaultValueSql: "'{}'::jsonb", comment: "The value of the RegistryItem.") + }, + constraints: table => + { + table.PrimaryKey("PK_64b3f7e6008b4d89b826cd3af95", x => x.id); + table.ForeignKey( + name: "FK_fb9d21ba0abb83223263df6bcb3", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "renote_muting", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Muting."), + muteeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The mutee user ID."), + muterId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The muter user ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_renoteMuting_id", x => x.id); + table.ForeignKey( + name: "FK_7aa72a5fe76019bfe8e5e0e8b7d", + column: x => x.muterId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_7eac97594bcac5ffcf2068089b6", + column: x => x.muteeId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "session", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth token"), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + token = table.Column(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The authorization token"), + active = table.Column(type: "boolean", nullable: false, comment: "Whether or not the token has been activated (i.e. 2fa has been confirmed)") + }, + constraints: table => + { + table.PrimaryKey("PK_f55da76ac1c3ac420f444d2ff11", x => x.id); + table.ForeignKey( + name: "FK_3d2f174ef04fb312fdebd0ddc53", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "signin", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Signin."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + ip = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + headers = table.Column(type: "jsonb", nullable: false), + success = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_9e96ddc025712616fc492b3b588", x => x.id); + table.ForeignKey( + name: "FK_2c308dbdc50d94dc625670055f7", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "sw_subscription", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + endpoint = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), + auth = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + publickey = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + sendReadMessage = table.Column(type: "boolean", nullable: false, defaultValue: false) + }, + constraints: table => + { + table.PrimaryKey("PK_e8f763631530051b95eb6279b91", x => x.id); + table.ForeignKey( + name: "FK_97754ca6f2baff9b4abb7f853dd", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_group", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroup."), + name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of owner."), + isPrivate = table.Column(type: "boolean", nullable: false, defaultValue: false) + }, + constraints: table => + { + table.PrimaryKey("PK_3c29fba6fe013ec8724378ce7c9", x => x.id); + table.ForeignKey( + name: "FK_3d6b372788ab01be58853003c93", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_keypair", + columns: table => new + { + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + publicKey = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: false), + privateKey = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_f4853eb41ab722fe05f81cedeb6", x => x.userId); + table.ForeignKey( + name: "FK_f4853eb41ab722fe05f81cedeb6", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_list", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserList."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the UserList."), + hideFromHomeTl = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether posts from list members should be hidden from the home timeline.") + }, + constraints: table => + { + table.PrimaryKey("PK_87bab75775fd9b1ff822b656402", x => x.id); + table.ForeignKey( + name: "FK_b7fcefbdd1c18dce86687531f99", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_publickey", + columns: table => new + { + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + keyId = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), + keyPem = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_10c146e4b39b443ede016f6736d", x => x.userId); + table.ForeignKey( + name: "FK_10c146e4b39b443ede016f6736d", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_security_key", + columns: table => new + { + id = table.Column(type: "character varying", nullable: false, comment: "Variable-length id given to navigator.credentials.get()"), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + publicKey = table.Column(type: "character varying", nullable: false, comment: "Variable-length public key used to verify attestations (hex-encoded)."), + lastUsed = table.Column(type: "timestamp with time zone", nullable: false, comment: "The date of the last time the UserSecurityKey was successfully validated."), + name = table.Column(type: "character varying(30)", maxLength: 30, nullable: false, comment: "User-defined name for this key") + }, + constraints: table => + { + table.PrimaryKey("PK_3e508571121ab39c5f85d10c166", x => x.id); + table.ForeignKey( + name: "FK_ff9ca3b5f3ee3d0681367a9b447", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "webhook", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Antenna."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."), + name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Antenna."), + on = table.Column>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + url = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false), + secret = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false), + active = table.Column(type: "boolean", nullable: false, defaultValue: true), + latestSentAt = table.Column(type: "timestamp with time zone", nullable: true), + latestStatus = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_e6765510c2d078db49632b59020", x => x.id); + table.ForeignKey( + name: "FK_f272c8c8805969e6a6449c77b3c", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "gallery_like", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + postId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_853ab02be39b8de45cd720cc15f", x => x.id); + table.ForeignKey( + name: "FK_8fd5215095473061855ceb948cf", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_b1cb568bfe569e47b7051699fc8", + column: x => x.postId, + principalTable: "gallery_post", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "html_note_cache_entry", + columns: table => new + { + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + updatedAt = table.Column(type: "timestamp with time zone", nullable: true), + content = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_6ef86ec901b2017cbe82d3a8286", x => x.noteId); + table.ForeignKey( + name: "FK_6ef86ec901b2017cbe82d3a8286", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_edit", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of note."), + text = table.Column(type: "text", nullable: true), + cw = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + fileIds = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + updatedAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The updated date of the Note.") + }, + constraints: table => + { + table.PrimaryKey("PK_736fc6e0d4e222ecc6f82058e08", x => x.id); + table.ForeignKey( + name: "FK_702ad5ae993a672e4fbffbcd38c", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_favorite", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteFavorite."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_af0da35a60b9fa4463a62082b36", x => x.id); + table.ForeignKey( + name: "FK_0e00498f180193423c992bc4370", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_47f4b1892f5d6ba8efb3057d81a", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_reaction", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteReaction."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + reaction = table.Column(type: "character varying(260)", maxLength: 260, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_767ec729b108799b587a3fcc9cf", x => x.id); + table.ForeignKey( + name: "FK_13761f64257f40c5636d0ff95ee", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_45145e4953780f3cd5656f0ea6a", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_unread", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteUserId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]"), + isSpecified = table.Column(type: "boolean", nullable: false), + isMentioned = table.Column(type: "boolean", nullable: false), + noteChannelId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_1904eda61a784f57e6e51fa9c1f", x => x.id); + table.ForeignKey( + name: "FK_56b0166d34ddae49d8ef7610bb9", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_e637cba4dc4410218c4251260e4", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "note_watching", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteWatching."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The watcher ID."), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The target Note ID."), + noteUserId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_49286fdb23725945a74aa27d757", x => x.id); + table.ForeignKey( + name: "FK_03e7028ab8388a3f5e3ce2a8619", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_b0134ec406e8d09a540f8182888", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "poll", + columns: table => new + { + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + expiresAt = table.Column(type: "timestamp with time zone", nullable: true), + multiple = table.Column(type: "boolean", nullable: false), + choices = table.Column>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + votes = table.Column>(type: "integer[]", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]"), + userHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + noteVisibility = table.Column(type: "poll_notevisibility_enum", nullable: false, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_da851e06d0dfe2ef397d8b1bf1b", x => x.noteId); + table.ForeignKey( + name: "FK_da851e06d0dfe2ef397d8b1bf1b", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "poll_vote", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the PollVote."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + choice = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_fd002d371201c472490ba89c6a0", x => x.id); + table.ForeignKey( + name: "FK_66d2bd2ee31d14bcc23069a89f8", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_aecfbd5ef60374918e63ee95fa7", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "promo_note", + columns: table => new + { + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + expiresAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]") + }, + constraints: table => + { + table.PrimaryKey("PK_e263909ca4fe5d57f8d4230dd5c", x => x.noteId); + table.ForeignKey( + name: "FK_e263909ca4fe5d57f8d4230dd5c", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "promo_read", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the PromoRead."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_61917c1541002422b703318b7c9", x => x.id); + table.ForeignKey( + name: "FK_9657d55550c3d37bfafaf7d4b05", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_a46a1a603ecee695d7db26da5f4", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_note_pining", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserNotePinings."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_a6a2dad4ae000abce2ea9d9b103", x => x.id); + table.ForeignKey( + name: "FK_68881008f7c3588ad7ecae471cf", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_bfbc6f79ba4007b4ce5097f08d6", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "page_like", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + pageId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_813f034843af992d3ae0f43c64c", x => x.id); + table.ForeignKey( + name: "FK_0e61efab7f88dbb79c9166dbb48", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_cf8782626dced3176038176a847", + column: x => x.pageId, + principalTable: "page", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_profile", + columns: table => new + { + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + location = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The location of the User."), + birthday = table.Column(type: "character(10)", fixedLength: true, maxLength: 10, nullable: true, comment: "The birthday (YYYY-MM-DD) of the User."), + description = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true, comment: "The description (bio) of the User."), + fields = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + url = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "Remote URL of the user."), + ffVisibility = table.Column(type: "user_profile_ffvisibility_enum", nullable: false, defaultValue: UserProfile.UserProfileFFVisibility.Public), + mutingNotificationTypes = table.Column>(type: "user_profile_mutingnotificationtypes_enum[]", nullable: false, defaultValueSql: "'{}'::public.user_profile_mutingnotificationtypes_enum[]"), + email = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The email address of the User."), + emailVerifyCode = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + emailVerified = table.Column(type: "boolean", nullable: false, defaultValue: false), + twoFactorTempSecret = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + twoFactorSecret = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + twoFactorEnabled = table.Column(type: "boolean", nullable: false, defaultValue: false), + password = table.Column(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The password hash of the User. It will be null if the origin of the user is local."), + clientData = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The client-specific data of the User."), + autoAcceptFollowed = table.Column(type: "boolean", nullable: false, defaultValue: false), + alwaysMarkNsfw = table.Column(type: "boolean", nullable: false, defaultValue: false), + carefulBot = table.Column(type: "boolean", nullable: false, defaultValue: false), + userHost = table.Column(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"), + securityKeysAvailable = table.Column(type: "boolean", nullable: false, defaultValue: false), + usePasswordLessLogin = table.Column(type: "boolean", nullable: false, defaultValue: false), + pinnedPageId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + room = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The room data of the User."), + integrations = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"), + injectFeaturedNote = table.Column(type: "boolean", nullable: false, defaultValue: true), + enableWordMute = table.Column(type: "boolean", nullable: false, defaultValue: false), + mutedWords = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"), + noCrawle = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether reject index by crawler."), + receiveAnnouncementEmail = table.Column(type: "boolean", nullable: false, defaultValue: true), + emailNotificationTypes = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[\"follow\", \"receiveFollowRequest\", \"groupInvited\"]'::jsonb"), + lang = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + mutedInstances = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb", comment: "List of instances muted by the user."), + publicReactions = table.Column(type: "boolean", nullable: false, defaultValue: false), + moderationNote = table.Column(type: "character varying(8192)", maxLength: 8192, nullable: false, defaultValueSql: "''::character varying"), + preventAiLearning = table.Column(type: "boolean", nullable: false, defaultValue: true), + mentions = table.Column(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb") + }, + constraints: table => + { + table.PrimaryKey("PK_51cb79b5555effaf7d69ba1cff9", x => x.userId); + table.ForeignKey( + name: "FK_51cb79b5555effaf7d69ba1cff9", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_6dc44f1ceb65b1e72bacef2ca27", + column: x => x.pinnedPageId, + principalTable: "page", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "messaging_message", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the MessagingMessage."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The sender user ID."), + recipientId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The recipient user ID."), + text = table.Column(type: "character varying(4096)", maxLength: 4096, nullable: true), + isRead = table.Column(type: "boolean", nullable: false, defaultValue: false), + fileId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + groupId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The recipient group ID."), + reads = table.Column>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"), + uri = table.Column(type: "character varying(512)", maxLength: 512, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_db398fd79dc95d0eb8c30456eaa", x => x.id); + table.ForeignKey( + name: "FK_2c4be03b446884f9e9c502135be", + column: x => x.groupId, + principalTable: "user_group", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_535def119223ac05ad3fa9ef64b", + column: x => x.fileId, + principalTable: "drive_file", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_5377c307783fce2b6d352e1203b", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_cac14a4e3944454a5ce7daa5142", + column: x => x.recipientId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_group_invitation", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroupInvitation."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."), + userGroupId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The group ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_160c63ec02bf23f6a5c5e8140d6", x => x.id); + table.ForeignKey( + name: "FK_5cc8c468090e129857e9fecce5a", + column: x => x.userGroupId, + principalTable: "user_group", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_bfbc6305547539369fe73eb144a", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_group_invite", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + userGroupId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_3893884af0d3a5f4d01e7921a97", x => x.id); + table.ForeignKey( + name: "FK_1039988afa3bf991185b277fe03", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_e10924607d058004304611a436a", + column: x => x.userGroupId, + principalTable: "user_group", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_group_joining", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroupJoining."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."), + userGroupId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The group ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_15f2425885253c5507e1599cfe7", x => x.id); + table.ForeignKey( + name: "FK_67dc758bc0566985d1b3d399865", + column: x => x.userGroupId, + principalTable: "user_group", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_f3a1b4bd0c7cabba958a0c0b231", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "user_list_joining", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserListJoining."), + userId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."), + userListId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The list ID.") + }, + constraints: table => + { + table.PrimaryKey("PK_11abb3768da1c5f8de101c9df45", x => x.id); + table.ForeignKey( + name: "FK_605472305f26818cc93d1baaa74", + column: x => x.userListId, + principalTable: "user_list", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_d844bfc6f3f523a05189076efaa", + column: x => x.userId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "notification", + columns: table => new + { + id = table.Column(type: "character varying(32)", maxLength: 32, nullable: false), + createdAt = table.Column(type: "timestamp with time zone", nullable: false, comment: "The created date of the Notification."), + notifieeId = table.Column(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of recipient user of the Notification."), + notifierId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of sender user of the Notification."), + isRead = table.Column(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the notification was read."), + type = table.Column(type: "notification_type_enum", nullable: false, comment: "The type of the Notification."), + noteId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + reaction = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + choice = table.Column(type: "integer", nullable: true), + followRequestId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + userGroupInvitationId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true), + customBody = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + customHeader = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + customIcon = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + appAccessTokenId = table.Column(type: "character varying(32)", maxLength: 32, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_705b6c7cdf9b2c2ff7ac7872cb7", x => x.id); + table.ForeignKey( + name: "FK_3b4e96eec8d36a8bbb9d02aa710", + column: x => x.notifierId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_3c601b70a1066d2c8b517094cb9", + column: x => x.notifieeId, + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_769cb6b73a1efe22ddf733ac453", + column: x => x.noteId, + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_8fe87814e978053a53b1beb7e98", + column: x => x.userGroupInvitationId, + principalTable: "user_group_invitation", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_bd7fab507621e635b32cd31892c", + column: x => x.followRequestId, + principalTable: "follow_request", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_e22bf6bda77b6adc1fd9e75c8c9", + column: x => x.appAccessTokenId, + principalTable: "access_token", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IDX_04cc96756f89d0b7f9473e8cdf", + table: "abuse_user_report", + column: "reporterId"); + + migrationBuilder.CreateIndex( + name: "IDX_2b15aaf4a0dc5be3499af7ab6a", + table: "abuse_user_report", + column: "resolved"); + + migrationBuilder.CreateIndex( + name: "IDX_4ebbf7f93cdc10e8d1ef2fc6cd", + table: "abuse_user_report", + column: "targetUserHost"); + + migrationBuilder.CreateIndex( + name: "IDX_a9021cc2e1feb5f72d3db6e9f5", + table: "abuse_user_report", + column: "targetUserId"); + + migrationBuilder.CreateIndex( + name: "IDX_db2098070b2b5a523c58181f74", + table: "abuse_user_report", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_f8d8b93740ad12c4ce8213a199", + table: "abuse_user_report", + column: "reporterHost"); + + migrationBuilder.CreateIndex( + name: "IX_abuse_user_report_assigneeId", + table: "abuse_user_report", + column: "assigneeId"); + + migrationBuilder.CreateIndex( + name: "IDX_64c327441248bae40f7d92f34f", + table: "access_token", + column: "hash"); + + migrationBuilder.CreateIndex( + name: "IDX_70ba8f6af34bc924fc9e12adb8", + table: "access_token", + column: "token"); + + migrationBuilder.CreateIndex( + name: "IDX_9949557d0e1b2c19e5344c171e", + table: "access_token", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_bf3a053c07d9fb5d87317c56ee", + table: "access_token", + column: "session"); + + migrationBuilder.CreateIndex( + name: "IX_access_token_appId", + table: "access_token", + column: "appId"); + + migrationBuilder.CreateIndex( + name: "IDX_118ec703e596086fc4515acb39", + table: "announcement", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_603a7b1e7aa0533c6c88e9bfaf", + table: "announcement_read", + column: "announcementId"); + + migrationBuilder.CreateIndex( + name: "IDX_8288151386172b8109f7239ab2", + table: "announcement_read", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_924fa71815cfa3941d003702a0", + table: "announcement_read", + columns: new[] { "userId", "announcementId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_6446c571a0e8d0f05f01c78909", + table: "antenna", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IX_antenna_userGroupJoiningId", + table: "antenna", + column: "userGroupJoiningId"); + + migrationBuilder.CreateIndex( + name: "IX_antenna_userListId", + table: "antenna", + column: "userListId"); + + migrationBuilder.CreateIndex( + name: "IDX_048a757923ed8b157e9895da53", + table: "app", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_3f5b0899ef90527a3462d7c2cb", + table: "app", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_f49922d511d666848f250663c4", + table: "app", + column: "secret"); + + migrationBuilder.CreateIndex( + name: "IDX_47efb914aed1f72dd39a306c7b", + table: "attestation_challenge", + column: "challenge"); + + migrationBuilder.CreateIndex( + name: "IDX_f1a461a618fa1755692d0e0d59", + table: "attestation_challenge", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_62cb09e1129f6ec024ef66e183", + table: "auth_session", + column: "token"); + + migrationBuilder.CreateIndex( + name: "IX_auth_session_appId", + table: "auth_session", + column: "appId"); + + migrationBuilder.CreateIndex( + name: "IX_auth_session_userId", + table: "auth_session", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_0627125f1a8a42c9a1929edb55", + table: "blocking", + column: "blockerId"); + + migrationBuilder.CreateIndex( + name: "IDX_2cd4a2743a99671308f5417759", + table: "blocking", + column: "blockeeId"); + + migrationBuilder.CreateIndex( + name: "IDX_98a1bc5cb30dfd159de056549f", + table: "blocking", + columns: new[] { "blockerId", "blockeeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_b9a354f7941c1e779f3b33aea6", + table: "blocking", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_094b86cd36bb805d1aa1e8cc9a", + table: "channel", + column: "usersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_0f58c11241e649d2a638a8de94", + table: "channel", + column: "notesCount"); + + migrationBuilder.CreateIndex( + name: "IDX_29ef80c6f13bcea998447fce43", + table: "channel", + column: "lastNotedAt"); + + migrationBuilder.CreateIndex( + name: "IDX_71cb7b435b7c0d4843317e7e16", + table: "channel", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_823bae55bd81b3be6e05cff438", + table: "channel", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IX_channel_bannerId", + table: "channel", + column: "bannerId"); + + migrationBuilder.CreateIndex( + name: "IDX_0e43068c3f92cab197c3d3cd86", + table: "channel_following", + column: "followeeId"); + + migrationBuilder.CreateIndex( + name: "IDX_11e71f2511589dcc8a4d3214f9", + table: "channel_following", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_2e230dd45a10e671d781d99f3e", + table: "channel_following", + columns: new[] { "followerId", "followeeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_6d8084ec9496e7334a4602707e", + table: "channel_following", + column: "followerId"); + + migrationBuilder.CreateIndex( + name: "IDX_8125f950afd3093acb10d2db8a", + table: "channel_note_pining", + column: "channelId"); + + migrationBuilder.CreateIndex( + name: "IDX_f36fed37d6d4cdcc68c803cd9c", + table: "channel_note_pining", + columns: new[] { "channelId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_channel_note_pining_noteId", + table: "channel_note_pining", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_2b5ec6c574d6802c94c80313fb", + table: "clip", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_6fc0ec357d55a18646262fdfff", + table: "clip_note", + columns: new[] { "noteId", "clipId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_a012eaf5c87c65da1deb5fdbfa", + table: "clip_note", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_ebe99317bbbe9968a0c6f579ad", + table: "clip_note", + column: "clipId"); + + migrationBuilder.CreateIndex( + name: "IDX_315c779174fe8247ab324f036e", + table: "drive_file", + column: "isLink"); + + migrationBuilder.CreateIndex( + name: "IDX_37bb9a1b4585f8a3beb24c62d6", + table: "drive_file", + column: "md5"); + + migrationBuilder.CreateIndex( + name: "IDX_55720b33a61a7c806a8215b825", + table: "drive_file", + columns: new[] { "userId", "folderId", "id" }); + + migrationBuilder.CreateIndex( + name: "IDX_860fa6f6c7df5bb887249fba22", + table: "drive_file", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_92779627994ac79277f070c91e", + table: "drive_file", + column: "userHost"); + + migrationBuilder.CreateIndex( + name: "IDX_a40b8df8c989d7db937ea27cf6", + table: "drive_file", + column: "type"); + + migrationBuilder.CreateIndex( + name: "IDX_a7eba67f8b3fa27271e85d2e26", + table: "drive_file", + column: "isSensitive"); + + migrationBuilder.CreateIndex( + name: "IDX_bb90d1956dafc4068c28aa7560", + table: "drive_file", + column: "folderId"); + + migrationBuilder.CreateIndex( + name: "IDX_c55b2b7c284d9fef98026fc88e", + table: "drive_file", + column: "webpublicAccessKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_c8dfad3b72196dd1d6b5db168a", + table: "drive_file", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_d85a184c2540d2deba33daf642", + table: "drive_file", + column: "accessKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_e5848eac4940934e23dbc17581", + table: "drive_file", + column: "uri"); + + migrationBuilder.CreateIndex( + name: "IDX_e74022ce9a074b3866f70e0d27", + table: "drive_file", + column: "thumbnailAccessKey", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_00ceffb0cdc238b3233294f08f", + table: "drive_folder", + column: "parentId"); + + migrationBuilder.CreateIndex( + name: "IDX_02878d441ceae15ce060b73daf", + table: "drive_folder", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_f4fc06e49c0171c85f1c48060d", + table: "drive_folder", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_4f4d35e1256c84ae3d1f0eab10", + table: "emoji", + columns: new[] { "name", "host" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_5900e907bb46516ddf2871327c", + table: "emoji", + column: "host"); + + migrationBuilder.CreateIndex( + name: "IDX_b37dafc86e9af007e3295c2781", + table: "emoji", + column: "name"); + + migrationBuilder.CreateIndex( + name: "IDX_12c01c0d1a79f77d9f6c15fadd", + table: "follow_request", + column: "followeeId"); + + migrationBuilder.CreateIndex( + name: "IDX_a7fd92dd6dc519e6fb435dd108", + table: "follow_request", + column: "followerId"); + + migrationBuilder.CreateIndex( + name: "IDX_d54a512b822fac7ed52800f6b4", + table: "follow_request", + columns: new[] { "followerId", "followeeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_24e0042143a18157b234df186c", + table: "following", + column: "followeeId"); + + migrationBuilder.CreateIndex( + name: "IDX_307be5f1d1252e0388662acb96", + table: "following", + columns: new[] { "followerId", "followeeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_4ccd2239268ebbd1b35e318754", + table: "following", + column: "followerHost"); + + migrationBuilder.CreateIndex( + name: "IDX_582f8fab771a9040a12961f3e7", + table: "following", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_6516c5a6f3c015b4eed39978be", + table: "following", + column: "followerId"); + + migrationBuilder.CreateIndex( + name: "IDX_fcdafee716dfe9c3b5fde90f30", + table: "following", + column: "followeeHost"); + + migrationBuilder.CreateIndex( + name: "IDX_8fd5215095473061855ceb948c", + table: "gallery_like", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_df1b5f4099e99fb0bc5eae53b6", + table: "gallery_like", + columns: new[] { "userId", "postId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_gallery_like_postId", + table: "gallery_like", + column: "postId"); + + migrationBuilder.CreateIndex( + name: "IDX_05cca34b985d1b8edc1d1e28df", + table: "gallery_post", + column: "tags"); + + migrationBuilder.CreateIndex( + name: "IDX_1a165c68a49d08f11caffbd206", + table: "gallery_post", + column: "likedCount"); + + migrationBuilder.CreateIndex( + name: "IDX_3ca50563facd913c425e7a89ee", + table: "gallery_post", + column: "fileIds"); + + migrationBuilder.CreateIndex( + name: "IDX_8f1a239bd077c8864a20c62c2c", + table: "gallery_post", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_985b836dddd8615e432d7043dd", + table: "gallery_post", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_f2d744d9a14d0dfb8b96cb7fc5", + table: "gallery_post", + column: "isSensitive"); + + migrationBuilder.CreateIndex( + name: "IDX_f631d37835adb04792e361807c", + table: "gallery_post", + column: "updatedAt"); + + migrationBuilder.CreateIndex( + name: "IDX_0b03cbcd7e6a7ce068efa8ecc2", + table: "hashtag", + column: "attachedRemoteUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_0c44bf4f680964145f2a68a341", + table: "hashtag", + column: "attachedLocalUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_0e206cec573f1edff4a3062923", + table: "hashtag", + column: "mentionedLocalUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_2710a55f826ee236ea1a62698f", + table: "hashtag", + column: "mentionedUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_347fec870eafea7b26c8a73bac", + table: "hashtag", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_4c02d38a976c3ae132228c6fce", + table: "hashtag", + column: "mentionedRemoteUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_d57f9030cd3af7f63ffb1c267c", + table: "hashtag", + column: "attachedUsersCount"); + + migrationBuilder.CreateIndex( + name: "IDX_2cd3b2a6b4cf0b910b260afe08", + table: "instance", + column: "caughtAt"); + + migrationBuilder.CreateIndex( + name: "IDX_34500da2e38ac393f7bb6b299c", + table: "instance", + column: "isSuspended"); + + migrationBuilder.CreateIndex( + name: "IDX_8d5afc98982185799b160e10eb", + table: "instance", + column: "host", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_2c4be03b446884f9e9c502135b", + table: "messaging_message", + column: "groupId"); + + migrationBuilder.CreateIndex( + name: "IDX_5377c307783fce2b6d352e1203", + table: "messaging_message", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_cac14a4e3944454a5ce7daa514", + table: "messaging_message", + column: "recipientId"); + + migrationBuilder.CreateIndex( + name: "IDX_e21cd3646e52ef9c94aaf17c2e", + table: "messaging_message", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IX_messaging_message_fileId", + table: "messaging_message", + column: "fileId"); + + migrationBuilder.CreateIndex( + name: "IDX_a08ad074601d204e0f69da9a95", + table: "moderation_log", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_1eb9d9824a630321a29fd3b290", + table: "muting", + columns: new[] { "muterId", "muteeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_93060675b4a79a577f31d260c6", + table: "muting", + column: "muterId"); + + migrationBuilder.CreateIndex( + name: "IDX_c1fd1c3dfb0627aa36c253fd14", + table: "muting", + column: "expiresAt"); + + migrationBuilder.CreateIndex( + name: "IDX_ec96b4fed9dae517e0dbbe0675", + table: "muting", + column: "muteeId"); + + migrationBuilder.CreateIndex( + name: "IDX_f86d57fbca33c7a4e6897490cc", + table: "muting", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_153536c67d05e9adb24e99fc2b", + table: "note", + column: "uri", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_17cb3553c700a4985dff5a30ff", + table: "note", + column: "replyId"); + + migrationBuilder.CreateIndex( + name: "IDX_25dfc71b0369b003a4cd434d0b", + table: "note", + column: "attachedFileTypes"); + + migrationBuilder.CreateIndex( + name: "IDX_51c063b6a133a9cb87145450f5", + table: "note", + column: "fileIds"); + + migrationBuilder.CreateIndex( + name: "IDX_52ccc804d7c69037d558bac4c9", + table: "note", + column: "renoteId"); + + migrationBuilder.CreateIndex( + name: "IDX_54ebcb6d27222913b908d56fd8", + table: "note", + column: "mentions"); + + migrationBuilder.CreateIndex( + name: "IDX_5b87d9d19127bd5d92026017a7", + table: "note", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_7125a826ab192eb27e11d358a5", + table: "note", + column: "userHost"); + + migrationBuilder.CreateIndex( + name: "IDX_796a8c03959361f97dc2be1d5c", + table: "note", + column: "visibleUserIds"); + + migrationBuilder.CreateIndex( + name: "IDX_88937d94d7443d9a99a76fa5c0", + table: "note", + column: "tags"); + + migrationBuilder.CreateIndex( + name: "IDX_NOTE_MENTIONS", + table: "note", + column: "mentions") + .Annotation("Npgsql:IndexMethod", "gin"); + + migrationBuilder.CreateIndex( + name: "IDX_NOTE_TAGS", + table: "note", + column: "tags") + .Annotation("Npgsql:IndexMethod", "gin"); + + migrationBuilder.CreateIndex( + name: "IDX_NOTE_VISIBLE_USER_IDS", + table: "note", + column: "visibleUserIds") + .Annotation("Npgsql:IndexMethod", "gin"); + + migrationBuilder.CreateIndex( + name: "IDX_d4ebdef929896d6dc4a3c5bb48", + table: "note", + column: "threadId"); + + migrationBuilder.CreateIndex( + name: "IDX_e7c0567f5261063592f022e9b5", + table: "note", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_f22169eb10657bded6d875ac8f", + table: "note", + column: "channelId"); + + migrationBuilder.CreateIndex( + name: "IDX_note_createdAt_userId", + table: "note", + columns: new[] { "createdAt", "userId" }); + + migrationBuilder.CreateIndex( + name: "IDX_note_id_userHost", + table: "note", + columns: new[] { "id", "userHost" }); + + migrationBuilder.CreateIndex( + name: "IDX_note_url", + table: "note", + column: "url"); + + migrationBuilder.CreateIndex( + name: "IDX_note_userId_id", + table: "note", + columns: new[] { "userId", "id" }); + + migrationBuilder.CreateIndex( + name: "note_text_fts_idx", + table: "note", + column: "text") + .Annotation("Npgsql:IndexMethod", "gin") + .Annotation("Npgsql:IndexOperators", new[] { "gin_trgm_ops" }); + + migrationBuilder.CreateIndex( + name: "IDX_702ad5ae993a672e4fbffbcd38", + table: "note_edit", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_0f4fb9ad355f3effff221ef245", + table: "note_favorite", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_47f4b1892f5d6ba8efb3057d81", + table: "note_favorite", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IX_note_favorite_noteId", + table: "note_favorite", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_01f4581f114e0ebd2bbb876f0b", + table: "note_reaction", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_13761f64257f40c5636d0ff95e", + table: "note_reaction", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_45145e4953780f3cd5656f0ea6", + table: "note_reaction", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_ad0c221b25672daf2df320a817", + table: "note_reaction", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_29c11c7deb06615076f8c95b80", + table: "note_thread_muting", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_ae7aab18a2641d3e5f25e0c4ea", + table: "note_thread_muting", + columns: new[] { "userId", "threadId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_c426394644267453e76f036926", + table: "note_thread_muting", + column: "threadId"); + + migrationBuilder.CreateIndex( + name: "IDX_25b1dd384bec391b07b74b861c", + table: "note_unread", + column: "isMentioned"); + + migrationBuilder.CreateIndex( + name: "IDX_29e8c1d579af54d4232939f994", + table: "note_unread", + column: "noteUserId"); + + migrationBuilder.CreateIndex( + name: "IDX_56b0166d34ddae49d8ef7610bb", + table: "note_unread", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_6a57f051d82c6d4036c141e107", + table: "note_unread", + column: "noteChannelId"); + + migrationBuilder.CreateIndex( + name: "IDX_89a29c9237b8c3b6b3cbb4cb30", + table: "note_unread", + column: "isSpecified"); + + migrationBuilder.CreateIndex( + name: "IDX_d908433a4953cc13216cd9c274", + table: "note_unread", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_e637cba4dc4410218c4251260e", + table: "note_unread", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_03e7028ab8388a3f5e3ce2a861", + table: "note_watching", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_318cdf42a9cfc11f479bd802bb", + table: "note_watching", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_44499765eec6b5489d72c4253b", + table: "note_watching", + column: "noteUserId"); + + migrationBuilder.CreateIndex( + name: "IDX_a42c93c69989ce1d09959df4cf", + table: "note_watching", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_b0134ec406e8d09a540f818288", + table: "note_watching", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_080ab397c379af09b9d2169e5b", + table: "notification", + column: "isRead"); + + migrationBuilder.CreateIndex( + name: "IDX_33f33cc8ef29d805a97ff4628b", + table: "notification", + column: "type"); + + migrationBuilder.CreateIndex( + name: "IDX_3b4e96eec8d36a8bbb9d02aa71", + table: "notification", + column: "notifierId"); + + migrationBuilder.CreateIndex( + name: "IDX_3c601b70a1066d2c8b517094cb", + table: "notification", + column: "notifieeId"); + + migrationBuilder.CreateIndex( + name: "IDX_b11a5e627c41d4dc3170f1d370", + table: "notification", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_e22bf6bda77b6adc1fd9e75c8c", + table: "notification", + column: "appAccessTokenId"); + + migrationBuilder.CreateIndex( + name: "IX_notification_followRequestId", + table: "notification", + column: "followRequestId"); + + migrationBuilder.CreateIndex( + name: "IX_notification_noteId", + table: "notification", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IX_notification_userGroupInvitationId", + table: "notification", + column: "userGroupInvitationId"); + + migrationBuilder.CreateIndex( + name: "IDX_65b61f406c811241e1315a2f82", + table: "oauth_app", + column: "clientId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_2cbeb4b389444bcf4379ef4273", + table: "oauth_token", + column: "token"); + + migrationBuilder.CreateIndex( + name: "IDX_dc5fe174a8b59025055f0ec136", + table: "oauth_token", + column: "code"); + + migrationBuilder.CreateIndex( + name: "IX_oauth_token_appId", + table: "oauth_token", + column: "appId"); + + migrationBuilder.CreateIndex( + name: "IX_oauth_token_userId", + table: "oauth_token", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_2133ef8317e4bdb839c0dcbf13", + table: "page", + columns: new[] { "userId", "name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_90148bbc2bf0854428786bfc15", + table: "page", + column: "visibleUserIds"); + + migrationBuilder.CreateIndex( + name: "IDX_ae1d917992dd0c9d9bbdad06c4", + table: "page", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_af639b066dfbca78b01a920f8a", + table: "page", + column: "updatedAt"); + + migrationBuilder.CreateIndex( + name: "IDX_b82c19c08afb292de4600d99e4", + table: "page", + column: "name"); + + migrationBuilder.CreateIndex( + name: "IDX_fbb4297c927a9b85e9cefa2eb1", + table: "page", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IX_page_eyeCatchingImageId", + table: "page", + column: "eyeCatchingImageId"); + + migrationBuilder.CreateIndex( + name: "IDX_0e61efab7f88dbb79c9166dbb4", + table: "page_like", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_4ce6fb9c70529b4c8ac46c9bfa", + table: "page_like", + columns: new[] { "userId", "pageId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_page_like_pageId", + table: "page_like", + column: "pageId"); + + migrationBuilder.CreateIndex( + name: "IDX_0b575fa9a4cfe638a925949285", + table: "password_reset_request", + column: "token", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_4bb7fd4a34492ae0e6cc8d30ac", + table: "password_reset_request", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_0610ebcfcfb4a18441a9bcdab2", + table: "poll", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_7fa20a12319c7f6dc3aed98c0a", + table: "poll", + column: "userHost"); + + migrationBuilder.CreateIndex( + name: "IDX_0fb627e1c2f753262a74f0562d", + table: "poll_vote", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_50bd7164c5b78f1f4a42c4d21f", + table: "poll_vote", + columns: new[] { "userId", "noteId", "choice" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_66d2bd2ee31d14bcc23069a89f", + table: "poll_vote", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_aecfbd5ef60374918e63ee95fa", + table: "poll_vote", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_83f0862e9bae44af52ced7099e", + table: "promo_note", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_2882b8a1a07c7d281a98b6db16", + table: "promo_read", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_9657d55550c3d37bfafaf7d4b0", + table: "promo_read", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IX_promo_read_noteId", + table: "promo_read", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_0ff69e8dfa9fe31bb4a4660f59", + table: "registration_ticket", + column: "code", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_0a72bdfcdb97c0eca11fe7ecad", + table: "registry_item", + column: "domain"); + + migrationBuilder.CreateIndex( + name: "IDX_22baca135bb8a3ea1a83d13df3", + table: "registry_item", + column: "scope"); + + migrationBuilder.CreateIndex( + name: "IDX_fb9d21ba0abb83223263df6bcb", + table: "registry_item", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_0d9a1738f2cf7f3b1c3334dfab", + table: "relay", + column: "inbox", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_0d801c609cec4e9eb4b6b4490c", + table: "renote_muting", + columns: new[] { "muterId", "muteeId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_7aa72a5fe76019bfe8e5e0e8b7", + table: "renote_muting", + column: "muterId"); + + migrationBuilder.CreateIndex( + name: "IDX_7eac97594bcac5ffcf2068089b", + table: "renote_muting", + column: "muteeId"); + + migrationBuilder.CreateIndex( + name: "IDX_d1259a2c2b7bb413ff449e8711", + table: "renote_muting", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_232f8e85d7633bd6ddfad42169", + table: "session", + column: "token"); + + migrationBuilder.CreateIndex( + name: "IX_session_userId", + table: "session", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_2c308dbdc50d94dc625670055f", + table: "signin", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_97754ca6f2baff9b4abb7f853d", + table: "sw_subscription", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_3252a5df8d5bbd16b281f7799e", + table: "user", + column: "host"); + + migrationBuilder.CreateIndex( + name: "IDX_5deb01ae162d1d70b80d064c27", + table: "user", + columns: new[] { "usernameLower", "host" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_80ca6e6ef65fb9ef34ea8c90f4", + table: "user", + column: "updatedAt"); + + migrationBuilder.CreateIndex( + name: "IDX_a27b942a0d6dcff90e3ee9b5e8", + table: "user", + column: "usernameLower"); + + migrationBuilder.CreateIndex( + name: "IDX_a854e557b1b14814750c7c7b0c", + table: "user", + column: "token", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_be623adaa4c566baf5d29ce0c8", + table: "user", + column: "uri"); + + migrationBuilder.CreateIndex( + name: "IDX_c8cc87bd0f2f4487d17c651fbf", + table: "user", + column: "lastActiveDate"); + + migrationBuilder.CreateIndex( + name: "IDX_d5a1b83c7cab66f167e6888188", + table: "user", + column: "isExplorable"); + + migrationBuilder.CreateIndex( + name: "IDX_e11e649824a45d8ed01d597fd9", + table: "user", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_fa99d777623947a5b05f394cae", + table: "user", + column: "tags"); + + migrationBuilder.CreateIndex( + name: "REL_58f5c71eaab331645112cf8cfa", + table: "user", + column: "avatarId", + unique: true); + + migrationBuilder.CreateIndex( + name: "REL_afc64b53f8db3707ceb34eb28e", + table: "user", + column: "bannerId", + unique: true); + + migrationBuilder.CreateIndex( + name: "UQ_a854e557b1b14814750c7c7b0c9", + table: "user", + column: "token", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_20e30aa35180e317e133d75316", + table: "user_group", + column: "createdAt"); + + migrationBuilder.CreateIndex( + name: "IDX_3d6b372788ab01be58853003c9", + table: "user_group", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_5cc8c468090e129857e9fecce5", + table: "user_group_invitation", + column: "userGroupId"); + + migrationBuilder.CreateIndex( + name: "IDX_bfbc6305547539369fe73eb144", + table: "user_group_invitation", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_e9793f65f504e5a31fbaedbf2f", + table: "user_group_invitation", + columns: new[] { "userId", "userGroupId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_1039988afa3bf991185b277fe0", + table: "user_group_invite", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_78787741f9010886796f2320a4", + table: "user_group_invite", + columns: new[] { "userId", "userGroupId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_e10924607d058004304611a436", + table: "user_group_invite", + column: "userGroupId"); + + migrationBuilder.CreateIndex( + name: "IDX_67dc758bc0566985d1b3d39986", + table: "user_group_joining", + column: "userGroupId"); + + migrationBuilder.CreateIndex( + name: "IDX_d9ecaed8c6dc43f3592c229282", + table: "user_group_joining", + columns: new[] { "userId", "userGroupId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_f3a1b4bd0c7cabba958a0c0b23", + table: "user_group_joining", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_b7fcefbdd1c18dce86687531f9", + table: "user_list", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_605472305f26818cc93d1baaa7", + table: "user_list_joining", + column: "userListId"); + + migrationBuilder.CreateIndex( + name: "IDX_90f7da835e4c10aca6853621e1", + table: "user_list_joining", + columns: new[] { "userId", "userListId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_d844bfc6f3f523a05189076efa", + table: "user_list_joining", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_410cd649884b501c02d6e72738", + table: "user_note_pining", + columns: new[] { "userId", "noteId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_bfbc6f79ba4007b4ce5097f08d", + table: "user_note_pining", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IX_user_note_pining_noteId", + table: "user_note_pining", + column: "noteId"); + + migrationBuilder.CreateIndex( + name: "IDX_4e5c4c99175638ec0761714ab0", + table: "user_pending", + column: "code", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_3befe6f999c86aff06eb0257b4", + table: "user_profile", + column: "enableWordMute"); + + migrationBuilder.CreateIndex( + name: "IDX_dce530b98e454793dac5ec2f5a", + table: "user_profile", + column: "userHost"); + + migrationBuilder.CreateIndex( + name: "UQ_6dc44f1ceb65b1e72bacef2ca27", + table: "user_profile", + column: "pinnedPageId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_171e64971c780ebd23fae140bb", + table: "user_publickey", + column: "keyId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IDX_0d7718e562dcedd0aa5cf2c9f7", + table: "user_security_key", + column: "publicKey"); + + migrationBuilder.CreateIndex( + name: "IDX_ff9ca3b5f3ee3d0681367a9b44", + table: "user_security_key", + column: "userId"); + + migrationBuilder.CreateIndex( + name: "IDX_5a056076f76b2efe08216ba655", + table: "webhook", + column: "active"); + + migrationBuilder.CreateIndex( + name: "IDX_8063a0586ed1dfbe86e982d961", + table: "webhook", + column: "on"); + + migrationBuilder.CreateIndex( + name: "IDX_f272c8c8805969e6a6449c77b3", + table: "webhook", + column: "userId"); + + migrationBuilder.AddForeignKey( + name: "FK_04cc96756f89d0b7f9473e8cdf3", + table: "abuse_user_report", + column: "reporterId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_08b883dd5fdd6f9c4c1572b36de", + table: "abuse_user_report", + column: "assigneeId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_a9021cc2e1feb5f72d3db6e9f5f", + table: "abuse_user_report", + column: "targetUserId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_9949557d0e1b2c19e5344c171e9", + table: "access_token", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_a3ff16c90cc87a82a0b5959e560", + table: "access_token", + column: "appId", + principalTable: "app", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_8288151386172b8109f7239ab28", + table: "announcement_read", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_6446c571a0e8d0f05f01c789096", + table: "antenna", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_709d7d32053d0dd7620f678eeb9", + table: "antenna", + column: "userListId", + principalTable: "user_list", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ccbf5a8c0be4511133dcc50ddeb", + table: "antenna", + column: "userGroupJoiningId", + principalTable: "user_group_joining", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_3f5b0899ef90527a3462d7c2cb3", + table: "app", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_f1a461a618fa1755692d0e0d592", + table: "attestation_challenge", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_c072b729d71697f959bde66ade0", + table: "auth_session", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_0627125f1a8a42c9a1929edb552", + table: "blocking", + column: "blockerId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_2cd4a2743a99671308f5417759e", + table: "blocking", + column: "blockeeId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_823bae55bd81b3be6e05cff4383", + table: "channel", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_999da2bcc7efadbfe0e92d3bc19", + table: "channel", + column: "bannerId", + principalTable: "drive_file", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_6d8084ec9496e7334a4602707e1", + table: "channel_following", + column: "followerId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_10b19ef67d297ea9de325cd4502", + table: "channel_note_pining", + column: "noteId", + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_2b5ec6c574d6802c94c80313fb2", + table: "clip", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_a012eaf5c87c65da1deb5fdbfa3", + table: "clip_note", + column: "noteId", + principalTable: "note", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_860fa6f6c7df5bb887249fba22e", + table: "drive_file", + column: "userId", + principalTable: "user", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_bb90d1956dafc4068c28aa7560a", + table: "drive_file", + column: "folderId", + principalTable: "drive_folder", + principalColumn: "id", + onDelete: ReferentialAction.SetNull); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_860fa6f6c7df5bb887249fba22e", + table: "drive_file"); + + migrationBuilder.DropForeignKey( + name: "FK_f4fc06e49c0171c85f1c48060d2", + table: "drive_folder"); + + migrationBuilder.DropTable( + name: "abuse_user_report"); + + migrationBuilder.DropTable( + name: "announcement_read"); + + migrationBuilder.DropTable( + name: "antenna"); + + migrationBuilder.DropTable( + name: "attestation_challenge"); + + migrationBuilder.DropTable( + name: "auth_session"); + + migrationBuilder.DropTable( + name: "blocking"); + + migrationBuilder.DropTable( + name: "channel_following"); + + migrationBuilder.DropTable( + name: "channel_note_pining"); + + migrationBuilder.DropTable( + name: "clip_note"); + + migrationBuilder.DropTable( + name: "emoji"); + + migrationBuilder.DropTable( + name: "following"); + + migrationBuilder.DropTable( + name: "gallery_like"); + + migrationBuilder.DropTable( + name: "hashtag"); + + migrationBuilder.DropTable( + name: "html_note_cache_entry"); + + migrationBuilder.DropTable( + name: "html_user_cache_entry"); + + migrationBuilder.DropTable( + name: "instance"); + + migrationBuilder.DropTable( + name: "messaging_message"); + + migrationBuilder.DropTable( + name: "meta"); + + migrationBuilder.DropTable( + name: "moderation_log"); + + migrationBuilder.DropTable( + name: "muting"); + + migrationBuilder.DropTable( + name: "note_edit"); + + migrationBuilder.DropTable( + name: "note_favorite"); + + migrationBuilder.DropTable( + name: "note_reaction"); + + migrationBuilder.DropTable( + name: "note_thread_muting"); + + migrationBuilder.DropTable( + name: "note_unread"); + + migrationBuilder.DropTable( + name: "note_watching"); + + migrationBuilder.DropTable( + name: "notification"); + + migrationBuilder.DropTable( + name: "oauth_token"); + + migrationBuilder.DropTable( + name: "page_like"); + + migrationBuilder.DropTable( + name: "password_reset_request"); + + migrationBuilder.DropTable( + name: "poll"); + + migrationBuilder.DropTable( + name: "poll_vote"); + + migrationBuilder.DropTable( + name: "promo_note"); + + migrationBuilder.DropTable( + name: "promo_read"); + + migrationBuilder.DropTable( + name: "registration_ticket"); + + migrationBuilder.DropTable( + name: "registry_item"); + + migrationBuilder.DropTable( + name: "relay"); + + migrationBuilder.DropTable( + name: "renote_muting"); + + migrationBuilder.DropTable( + name: "session"); + + migrationBuilder.DropTable( + name: "signin"); + + migrationBuilder.DropTable( + name: "sw_subscription"); + + migrationBuilder.DropTable( + name: "used_username"); + + migrationBuilder.DropTable( + name: "user_group_invite"); + + migrationBuilder.DropTable( + name: "user_keypair"); + + migrationBuilder.DropTable( + name: "user_list_joining"); + + migrationBuilder.DropTable( + name: "user_note_pining"); + + migrationBuilder.DropTable( + name: "user_pending"); + + migrationBuilder.DropTable( + name: "user_profile"); + + migrationBuilder.DropTable( + name: "user_publickey"); + + migrationBuilder.DropTable( + name: "user_security_key"); + + migrationBuilder.DropTable( + name: "webhook"); + + migrationBuilder.DropTable( + name: "announcement"); + + migrationBuilder.DropTable( + name: "user_group_joining"); + + migrationBuilder.DropTable( + name: "clip"); + + migrationBuilder.DropTable( + name: "gallery_post"); + + migrationBuilder.DropTable( + name: "user_group_invitation"); + + migrationBuilder.DropTable( + name: "follow_request"); + + migrationBuilder.DropTable( + name: "access_token"); + + migrationBuilder.DropTable( + name: "oauth_app"); + + migrationBuilder.DropTable( + name: "user_list"); + + migrationBuilder.DropTable( + name: "note"); + + migrationBuilder.DropTable( + name: "page"); + + migrationBuilder.DropTable( + name: "user_group"); + + migrationBuilder.DropTable( + name: "app"); + + migrationBuilder.DropTable( + name: "channel"); + + migrationBuilder.DropTable( + name: "user"); + + migrationBuilder.DropTable( + name: "drive_file"); + + migrationBuilder.DropTable( + name: "drive_folder"); + } + } +} diff --git a/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs b/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs new file mode 100644 index 00000000..4e143155 --- /dev/null +++ b/Iceshrimp.Backend/Core/Database/Migrations/DatabaseContextModelSnapshot.cs @@ -0,0 +1,6136 @@ +// +using System; +using System.Collections.Generic; +using Iceshrimp.Backend.Core.Database; +using Iceshrimp.Backend.Core.Database.Tables; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Iceshrimp.Backend.Core.Database.Migrations +{ + [DbContext(typeof(DatabaseContext))] + partial class DatabaseContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "antenna_src_enum", new[] { "home", "all", "users", "list", "group", "instances" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "log_level_enum", new[] { "error", "warning", "info", "success", "debug" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "note_visibility_enum", new[] { "public", "home", "followers", "specified", "hidden" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "notification_type_enum", new[] { "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "page_visibility_enum", new[] { "public", "followers", "specified" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "poll_notevisibility_enum", new[] { "public", "home", "followers", "specified", "hidden" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "relay_status_enum", new[] { "requesting", "accepted", "rejected" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "user_profile_ffvisibility_enum", new[] { "public", "followers", "private" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "user_profile_mutingnotificationtypes_enum", new[] { "follow", "mention", "reply", "renote", "quote", "reaction", "pollVote", "pollEnded", "receiveFollowRequest", "followRequestAccepted", "groupInvited", "app" }); + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "pg_trgm"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AbuseUserReport", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AssigneeId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("assigneeId"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("comment"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AbuseUserReport."); + + b.Property("Forwarded") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("forwarded"); + + b.Property("ReporterHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("reporterHost") + .HasComment("[Denormalized]"); + + b.Property("ReporterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("reporterId"); + + b.Property("Resolved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("resolved"); + + b.Property("TargetUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("targetUserHost") + .HasComment("[Denormalized]"); + + b.Property("TargetUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("targetUserId"); + + b.HasKey("Id") + .HasName("PK_87873f5f5cc5c321a1306b2d18c"); + + b.HasIndex("AssigneeId"); + + b.HasIndex(new[] { "ReporterId" }, "IDX_04cc96756f89d0b7f9473e8cdf"); + + b.HasIndex(new[] { "Resolved" }, "IDX_2b15aaf4a0dc5be3499af7ab6a"); + + b.HasIndex(new[] { "TargetUserHost" }, "IDX_4ebbf7f93cdc10e8d1ef2fc6cd"); + + b.HasIndex(new[] { "TargetUserId" }, "IDX_a9021cc2e1feb5f72d3db6e9f5"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_db2098070b2b5a523c58181f74"); + + b.HasIndex(new[] { "ReporterHost" }, "IDX_f8d8b93740ad12c4ce8213a199"); + + b.ToTable("abuse_user_report"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AccessToken."); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("description"); + + b.Property("Fetched") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("fetched"); + + b.Property("Hash") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("hash"); + + b.Property("IconUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("iconUrl"); + + b.Property("LastUsedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastUsedAt"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property>("Permission") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(64)[]") + .HasColumnName("permission") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Session") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("session"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_f20f028607b2603deabd8182d12"); + + b.HasIndex("AppId"); + + b.HasIndex(new[] { "Hash" }, "IDX_64c327441248bae40f7d92f34f"); + + b.HasIndex(new[] { "Token" }, "IDX_70ba8f6af34bc924fc9e12adb8"); + + b.HasIndex(new[] { "UserId" }, "IDX_9949557d0e1b2c19e5344c171e"); + + b.HasIndex(new[] { "Session" }, "IDX_bf3a053c07d9fb5d87317c56ee"); + + b.ToTable("access_token"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Announcement", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Announcement."); + + b.Property("ImageUrl") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("imageUrl"); + + b.Property("IsGoodNews") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isGoodNews"); + + b.Property("ShowPopup") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("showPopup"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("text"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Announcement."); + + b.HasKey("Id") + .HasName("PK_e0ef0550174fd1099a308fd18a0"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_118ec703e596086fc4515acb39"); + + b.ToTable("announcement"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AnnouncementRead", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AnnouncementId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("announcementId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AnnouncementRead."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_4b90ad1f42681d97b2683890c5e"); + + b.HasIndex(new[] { "AnnouncementId" }, "IDX_603a7b1e7aa0533c6c88e9bfaf"); + + b.HasIndex(new[] { "UserId" }, "IDX_8288151386172b8109f7239ab2"); + + b.HasIndex(new[] { "UserId", "AnnouncementId" }, "IDX_924fa71815cfa3941d003702a0") + .IsUnique(); + + b.ToTable("announcement_read"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Antenna", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CaseSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("caseSensitive"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Antenna."); + + b.Property("ExcludeKeywords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("excludeKeywords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Expression") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("expression"); + + b.Property("Instances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("instances") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Keywords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("keywords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Antenna."); + + b.Property("Notify") + .HasColumnType("boolean") + .HasColumnName("notify"); + + b.Property("Source") + .HasColumnType("antenna_src_enum") + .HasColumnName("src"); + + b.Property("UserGroupJoiningId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupJoiningId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("UserListId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userListId"); + + b.Property>("Users") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(1024)[]") + .HasColumnName("users") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("WithFile") + .HasColumnType("boolean") + .HasColumnName("withFile"); + + b.Property("WithReplies") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("withReplies"); + + b.HasKey("Id") + .HasName("PK_c170b99775e1dccca947c9f2d5f"); + + b.HasIndex("UserGroupJoiningId"); + + b.HasIndex("UserListId"); + + b.HasIndex(new[] { "UserId" }, "IDX_6446c571a0e8d0f05f01c78909"); + + b.ToTable("antenna"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CallbackUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("callbackUrl") + .HasComment("The callbackUrl of the App."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the App."); + + b.Property("Description") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("description") + .HasComment("The description of the App."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the App."); + + b.Property>("Permission") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("permission") + .HasComment("The permission of the App."); + + b.Property("Secret") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("secret") + .HasComment("The secret key of the App."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_9478629fc093d229df09e560aea"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_048a757923ed8b157e9895da53"); + + b.HasIndex(new[] { "UserId" }, "IDX_3f5b0899ef90527a3462d7c2cb"); + + b.HasIndex(new[] { "Secret" }, "IDX_f49922d511d666848f250663c4"); + + b.ToTable("app"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AttestationChallenge", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("Challenge") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("challenge") + .HasComment("Hex-encoded sha256 hash of the challenge."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The date challenge was created for expiry purposes."); + + b.Property("RegistrationChallenge") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("registrationChallenge") + .HasComment("Indicates that the challenge is only for registration purposes if true to prevent the challenge for being used as authentication."); + + b.HasKey("Id", "UserId") + .HasName("PK_d0ba6786e093f1bcb497572a6b5"); + + b.HasIndex(new[] { "Challenge" }, "IDX_47efb914aed1f72dd39a306c7b"); + + b.HasIndex(new[] { "UserId" }, "IDX_f1a461a618fa1755692d0e0d59"); + + b.ToTable("attestation_challenge"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AuthSession", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the AuthSession."); + + b.Property("Token") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("token"); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_19354ed146424a728c1112a8cbf"); + + b.HasIndex("AppId"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_62cb09e1129f6ec024ef66e183"); + + b.ToTable("auth_session"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Blocking", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("BlockeeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("blockeeId") + .HasComment("The blockee user ID."); + + b.Property("BlockerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("blockerId") + .HasComment("The blocker user ID."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Blocking."); + + b.HasKey("Id") + .HasName("PK_e5d9a541cc1965ee7e048ea09dd"); + + b.HasIndex(new[] { "BlockerId" }, "IDX_0627125f1a8a42c9a1929edb55"); + + b.HasIndex(new[] { "BlockeeId" }, "IDX_2cd4a2743a99671308f5417759"); + + b.HasIndex(new[] { "BlockerId", "BlockeeId" }, "IDX_98a1bc5cb30dfd159de056549f") + .IsUnique(); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_b9a354f7941c1e779f3b33aea6"); + + b.ToTable("blocking"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("BannerId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("bannerId") + .HasComment("The ID of banner Channel."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Channel."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description of the Channel."); + + b.Property("LastNotedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastNotedAt"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Channel."); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of notes."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("UsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("usersCount") + .HasComment("The count of users."); + + b.HasKey("Id") + .HasName("PK_590f33ee6ee7d76437acf362e39"); + + b.HasIndex("BannerId"); + + b.HasIndex(new[] { "UsersCount" }, "IDX_094b86cd36bb805d1aa1e8cc9a"); + + b.HasIndex(new[] { "NotesCount" }, "IDX_0f58c11241e649d2a638a8de94"); + + b.HasIndex(new[] { "LastNotedAt" }, "IDX_29ef80c6f13bcea998447fce43"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_71cb7b435b7c0d4843317e7e16"); + + b.HasIndex(new[] { "UserId" }, "IDX_823bae55bd81b3be6e05cff438"); + + b.ToTable("channel"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelFollowing", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ChannelFollowing."); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee channel ID."); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.HasKey("Id") + .HasName("PK_8b104be7f7415113f2a02cd5bdd"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_0e43068c3f92cab197c3d3cd86"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_11e71f2511589dcc8a4d3214f9"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_2e230dd45a10e671d781d99f3e") + .IsUnique(); + + b.HasIndex(new[] { "FollowerId" }, "IDX_6d8084ec9496e7334a4602707e"); + + b.ToTable("channel_following"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelNotePining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ChannelId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("channelId"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ChannelNotePining."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.HasKey("Id") + .HasName("PK_44f7474496bcf2e4b741681146d"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "ChannelId" }, "IDX_8125f950afd3093acb10d2db8a"); + + b.HasIndex(new[] { "ChannelId", "NoteId" }, "IDX_f36fed37d6d4cdcc68c803cd9c") + .IsUnique(); + + b.ToTable("channel_note_pining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Clip."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description of the Clip."); + + b.Property("IsPublic") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isPublic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Clip."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_f0685dac8d4dd056d7255670b75"); + + b.HasIndex(new[] { "UserId" }, "IDX_2b5ec6c574d6802c94c80313fb"); + + b.ToTable("clip"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ClipNote", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ClipId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("clipId") + .HasComment("The clip ID."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The note ID."); + + b.HasKey("Id") + .HasName("PK_e94cda2f40a99b57e032a1a738b"); + + b.HasIndex(new[] { "NoteId", "ClipId" }, "IDX_6fc0ec357d55a18646262fdfff") + .IsUnique(); + + b.HasIndex(new[] { "NoteId" }, "IDX_a012eaf5c87c65da1deb5fdbfa"); + + b.HasIndex(new[] { "ClipId" }, "IDX_ebe99317bbbe9968a0c6f579ad"); + + b.ToTable("clip_note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("accessKey"); + + b.Property("Blurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("blurhash") + .HasComment("The BlurHash string."); + + b.Property("Comment") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("comment") + .HasComment("The comment of the DriveFile."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the DriveFile."); + + b.Property("FolderId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("folderId") + .HasComment("The parent folder ID. If null, it means the DriveFile is located in root."); + + b.Property("IsLink") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isLink") + .HasComment("Whether the DriveFile is direct link to remote server."); + + b.Property("IsSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSensitive") + .HasComment("Whether the DriveFile is NSFW."); + + b.Property("Md5") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("md5") + .HasComment("The MD5 hash of the DriveFile."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name") + .HasComment("The file name of the DriveFile."); + + b.Property("Properties") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("properties") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The any properties of the DriveFile. For example, it includes image width/height."); + + b.Property("RequestHeaders") + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("requestHeaders") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("RequestIp") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("requestIp"); + + b.Property("Size") + .HasColumnType("integer") + .HasColumnName("size") + .HasComment("The file size (bytes) of the DriveFile."); + + b.Property("Src") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("src"); + + b.Property("StoredInternal") + .HasColumnType("boolean") + .HasColumnName("storedInternal"); + + b.Property("ThumbnailAccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("thumbnailAccessKey"); + + b.Property("ThumbnailUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("thumbnailUrl") + .HasComment("The URL of the thumbnail of the DriveFile."); + + b.Property("Type") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("type") + .HasComment("The content type (MIME) of the DriveFile."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of the DriveFile. it will be null when the DriveFile is local."); + + b.Property("Url") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("The URL of the DriveFile."); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("The host of owner. It will be null if the user in local."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("WebpublicAccessKey") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("webpublicAccessKey"); + + b.Property("WebpublicType") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("webpublicType"); + + b.Property("WebpublicUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("webpublicUrl") + .HasComment("The URL of the webpublic of the DriveFile."); + + b.HasKey("Id") + .HasName("PK_43ddaaaf18c9e68029b7cbb032e"); + + b.HasIndex(new[] { "IsLink" }, "IDX_315c779174fe8247ab324f036e"); + + b.HasIndex(new[] { "Md5" }, "IDX_37bb9a1b4585f8a3beb24c62d6"); + + b.HasIndex(new[] { "UserId", "FolderId", "Id" }, "IDX_55720b33a61a7c806a8215b825"); + + b.HasIndex(new[] { "UserId" }, "IDX_860fa6f6c7df5bb887249fba22"); + + b.HasIndex(new[] { "UserHost" }, "IDX_92779627994ac79277f070c91e"); + + b.HasIndex(new[] { "Type" }, "IDX_a40b8df8c989d7db937ea27cf6"); + + b.HasIndex(new[] { "IsSensitive" }, "IDX_a7eba67f8b3fa27271e85d2e26"); + + b.HasIndex(new[] { "FolderId" }, "IDX_bb90d1956dafc4068c28aa7560"); + + b.HasIndex(new[] { "WebpublicAccessKey" }, "IDX_c55b2b7c284d9fef98026fc88e") + .IsUnique(); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_c8dfad3b72196dd1d6b5db168a"); + + b.HasIndex(new[] { "AccessKey" }, "IDX_d85a184c2540d2deba33daf642") + .IsUnique(); + + b.HasIndex(new[] { "Uri" }, "IDX_e5848eac4940934e23dbc17581"); + + b.HasIndex(new[] { "ThumbnailAccessKey" }, "IDX_e74022ce9a074b3866f70e0d27") + .IsUnique(); + + b.ToTable("drive_file"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the DriveFolder."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the DriveFolder."); + + b.Property("ParentId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("parentId") + .HasComment("The parent folder ID. If null, it means the DriveFolder is located in root."); + + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_7a0c089191f5ebdc214e0af808a"); + + b.HasIndex(new[] { "ParentId" }, "IDX_00ceffb0cdc238b3233294f08f"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_02878d441ceae15ce060b73daf"); + + b.HasIndex(new[] { "UserId" }, "IDX_f4fc06e49c0171c85f1c48060d"); + + b.ToTable("drive_folder"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Emoji", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("Aliases") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("aliases") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Category") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("category"); + + b.Property("Height") + .HasColumnType("integer") + .HasColumnName("height") + .HasComment("Image height"); + + b.Property("Host") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("license"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("OriginalUrl") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("originalUrl"); + + b.Property("PublicUrl") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("publicUrl") + .HasDefaultValueSql("''::character varying"); + + b.Property("Type") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("type"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri"); + + b.Property("Width") + .HasColumnType("integer") + .HasColumnName("width") + .HasComment("Image width"); + + b.HasKey("Id") + .HasName("PK_df74ce05e24999ee01ea0bc50a3"); + + b.HasIndex(new[] { "Name", "Host" }, "IDX_4f4d35e1256c84ae3d1f0eab10") + .IsUnique(); + + b.HasIndex(new[] { "Host" }, "IDX_5900e907bb46516ddf2871327c"); + + b.HasIndex(new[] { "Name" }, "IDX_b37dafc86e9af007e3295c2781"); + + b.ToTable("emoji"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the FollowRequest."); + + b.Property("FolloweeHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeHost") + .HasComment("[Denormalized]"); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee user ID."); + + b.Property("FolloweeInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeInbox") + .HasComment("[Denormalized]"); + + b.Property("FolloweeSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerHost") + .HasComment("[Denormalized]"); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.Property("FollowerInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("RequestId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("requestId") + .HasComment("id of Follow Activity."); + + b.HasKey("Id") + .HasName("PK_53a9aa3725f7a3deb150b39dbfc"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_12c01c0d1a79f77d9f6c15fadd"); + + b.HasIndex(new[] { "FollowerId" }, "IDX_a7fd92dd6dc519e6fb435dd108"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_d54a512b822fac7ed52800f6b4") + .IsUnique(); + + b.ToTable("follow_request"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Following", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Following."); + + b.Property("FolloweeHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeHost") + .HasComment("[Denormalized]"); + + b.Property("FolloweeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followeeId") + .HasComment("The followee user ID."); + + b.Property("FolloweeInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeInbox") + .HasComment("[Denormalized]"); + + b.Property("FolloweeSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followeeSharedInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerHost") + .HasComment("[Denormalized]"); + + b.Property("FollowerId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followerId") + .HasComment("The follower user ID."); + + b.Property("FollowerInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerInbox") + .HasComment("[Denormalized]"); + + b.Property("FollowerSharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followerSharedInbox") + .HasComment("[Denormalized]"); + + b.HasKey("Id") + .HasName("PK_c76c6e044bdf76ecf8bfb82a645"); + + b.HasIndex(new[] { "FolloweeId" }, "IDX_24e0042143a18157b234df186c"); + + b.HasIndex(new[] { "FollowerId", "FolloweeId" }, "IDX_307be5f1d1252e0388662acb96") + .IsUnique(); + + b.HasIndex(new[] { "FollowerHost" }, "IDX_4ccd2239268ebbd1b35e318754"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_582f8fab771a9040a12961f3e7"); + + b.HasIndex(new[] { "FollowerId" }, "IDX_6516c5a6f3c015b4eed39978be"); + + b.HasIndex(new[] { "FolloweeHost" }, "IDX_fcdafee716dfe9c3b5fde90f30"); + + b.ToTable("following"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryLike", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("PostId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("postId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_853ab02be39b8de45cd720cc15f"); + + b.HasIndex("PostId"); + + b.HasIndex(new[] { "UserId" }, "IDX_8fd5215095473061855ceb948c"); + + b.HasIndex(new[] { "UserId", "PostId" }, "IDX_df1b5f4099e99fb0bc5eae53b6") + .IsUnique(); + + b.ToTable("gallery_like"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the GalleryPost."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("IsSensitive") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSensitive") + .HasComment("Whether the post is sensitive."); + + b.Property("LikedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("likedCount"); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the GalleryPost."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.HasKey("Id") + .HasName("PK_8e90d7b6015f2c4518881b14753"); + + b.HasIndex(new[] { "Tags" }, "IDX_05cca34b985d1b8edc1d1e28df"); + + b.HasIndex(new[] { "LikedCount" }, "IDX_1a165c68a49d08f11caffbd206"); + + b.HasIndex(new[] { "FileIds" }, "IDX_3ca50563facd913c425e7a89ee"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_8f1a239bd077c8864a20c62c2c"); + + b.HasIndex(new[] { "UserId" }, "IDX_985b836dddd8615e432d7043dd"); + + b.HasIndex(new[] { "IsSensitive" }, "IDX_f2d744d9a14d0dfb8b96cb7fc5"); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_f631d37835adb04792e361807c"); + + b.ToTable("gallery_post"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Hashtag", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AttachedLocalUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedLocalUserIds"); + + b.Property("AttachedLocalUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedLocalUsersCount"); + + b.Property>("AttachedRemoteUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedRemoteUserIds"); + + b.Property("AttachedRemoteUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedRemoteUsersCount"); + + b.Property>("AttachedUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("attachedUserIds"); + + b.Property("AttachedUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("attachedUsersCount"); + + b.Property>("MentionedLocalUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedLocalUserIds"); + + b.Property("MentionedLocalUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedLocalUsersCount"); + + b.Property>("MentionedRemoteUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedRemoteUserIds"); + + b.Property("MentionedRemoteUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedRemoteUsersCount"); + + b.Property>("MentionedUserIds") + .IsRequired() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentionedUserIds"); + + b.Property("MentionedUsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("mentionedUsersCount"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_cb36eb8af8412bfa978f1165d78"); + + b.HasIndex(new[] { "AttachedRemoteUsersCount" }, "IDX_0b03cbcd7e6a7ce068efa8ecc2"); + + b.HasIndex(new[] { "AttachedLocalUsersCount" }, "IDX_0c44bf4f680964145f2a68a341"); + + b.HasIndex(new[] { "MentionedLocalUsersCount" }, "IDX_0e206cec573f1edff4a3062923"); + + b.HasIndex(new[] { "MentionedUsersCount" }, "IDX_2710a55f826ee236ea1a62698f"); + + b.HasIndex(new[] { "Name" }, "IDX_347fec870eafea7b26c8a73bac") + .IsUnique(); + + b.HasIndex(new[] { "MentionedRemoteUsersCount" }, "IDX_4c02d38a976c3ae132228c6fce"); + + b.HasIndex(new[] { "AttachedUsersCount" }, "IDX_d57f9030cd3af7f63ffb1c267c"); + + b.ToTable("hashtag"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("Content") + .HasColumnType("text") + .HasColumnName("content"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.HasKey("NoteId") + .HasName("PK_6ef86ec901b2017cbe82d3a8286"); + + b.ToTable("html_note_cache_entry"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("Bio") + .HasColumnType("text") + .HasColumnName("bio"); + + b.Property("Fields") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("fields") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt"); + + b.HasKey("UserId") + .HasName("PK_920b9474e3c9cae3f3c37c057e1"); + + b.ToTable("html_user_cache_entry"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Instance", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CaughtAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("caughtAt") + .HasComment("The caught date of the Instance."); + + b.Property("Description") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("description"); + + b.Property("FaviconUrl") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("faviconUrl"); + + b.Property("FollowersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followersCount"); + + b.Property("FollowingCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followingCount"); + + b.Property("Host") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host") + .HasComment("The host of the Instance."); + + b.Property("IconUrl") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("iconUrl"); + + b.Property("InfoUpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("infoUpdatedAt"); + + b.Property("IsNotResponding") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isNotResponding"); + + b.Property("IsSuspended") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSuspended"); + + b.Property("LastCommunicatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastCommunicatedAt"); + + b.Property("LatestRequestReceivedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestRequestReceivedAt"); + + b.Property("LatestRequestSentAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestRequestSentAt"); + + b.Property("LatestStatus") + .HasColumnType("integer") + .HasColumnName("latestStatus"); + + b.Property("MaintainerEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("maintainerEmail"); + + b.Property("MaintainerName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerName"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of the notes of the Instance."); + + b.Property("OpenRegistrations") + .HasColumnType("boolean") + .HasColumnName("openRegistrations"); + + b.Property("SoftwareName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("softwareName") + .HasComment("The software of the Instance."); + + b.Property("SoftwareVersion") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("softwareVersion"); + + b.Property("ThemeColor") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("themeColor"); + + b.Property("UsersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("usersCount") + .HasComment("The count of the users of the Instance."); + + b.HasKey("Id") + .HasName("PK_eaf60e4a0c399c9935413e06474"); + + b.HasIndex(new[] { "CaughtAt" }, "IDX_2cd3b2a6b4cf0b910b260afe08"); + + b.HasIndex(new[] { "IsSuspended" }, "IDX_34500da2e38ac393f7bb6b299c"); + + b.HasIndex(new[] { "Host" }, "IDX_8d5afc98982185799b160e10eb") + .IsUnique(); + + b.ToTable("instance"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.MessagingMessage", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the MessagingMessage."); + + b.Property("FileId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("fileId"); + + b.Property("GroupId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("groupId") + .HasComment("The recipient group ID."); + + b.Property("IsRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isRead"); + + b.Property>("Reads") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("reads") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("RecipientId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("recipientId") + .HasComment("The recipient user ID."); + + b.Property("Text") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("text"); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The sender user ID."); + + b.HasKey("Id") + .HasName("PK_db398fd79dc95d0eb8c30456eaa"); + + b.HasIndex("FileId"); + + b.HasIndex(new[] { "GroupId" }, "IDX_2c4be03b446884f9e9c502135b"); + + b.HasIndex(new[] { "UserId" }, "IDX_5377c307783fce2b6d352e1203"); + + b.HasIndex(new[] { "RecipientId" }, "IDX_cac14a4e3944454a5ce7daa514"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e21cd3646e52ef9c94aaf17c2e"); + + b.ToTable("messaging_message"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Metum", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AllowedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("allowedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("AutofollowedAccount") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("autofollowedAccount"); + + b.Property("BackgroundImageUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("backgroundImageUrl"); + + b.Property("BannerUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("bannerUrl"); + + b.Property>("BlockedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("blockedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("CacheRemoteFiles") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("cacheRemoteFiles"); + + b.Property>("CustomMotd") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("customMOTD") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property>("CustomSplashIcons") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("customSplashIcons") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("DeeplAuthKey") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("deeplAuthKey"); + + b.Property("DeeplIsPro") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("deeplIsPro"); + + b.Property("DefaultDarkTheme") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("defaultDarkTheme"); + + b.Property("DefaultLightTheme") + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("defaultLightTheme"); + + b.Property("DefaultReaction") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("defaultReaction") + .HasDefaultValueSql("'⭐'::character varying"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("description"); + + b.Property("DisableGlobalTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableGlobalTimeline"); + + b.Property("DisableLocalTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableLocalTimeline"); + + b.Property("DisableRecommendedTimeline") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("disableRecommendedTimeline"); + + b.Property("DisableRegistration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("disableRegistration"); + + b.Property("DiscordClientId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("discordClientId"); + + b.Property("DiscordClientSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("discordClientSecret"); + + b.Property("DonationLink") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("donationLink"); + + b.Property("Email") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email"); + + b.Property("EmailRequiredForSignup") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("emailRequiredForSignup"); + + b.Property("EnableActiveEmailValidation") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("enableActiveEmailValidation"); + + b.Property("EnableDiscordIntegration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableDiscordIntegration"); + + b.Property("EnableEmail") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableEmail"); + + b.Property("EnableGithubIntegration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableGithubIntegration"); + + b.Property("EnableHcaptcha") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableHcaptcha"); + + b.Property("EnableIdenticonGeneration") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("enableIdenticonGeneration"); + + b.Property("EnableIpLogging") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableIpLogging"); + + b.Property("EnableRecaptcha") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableRecaptcha"); + + b.Property("EnableServerMachineStats") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableServerMachineStats"); + + b.Property("ErrorImageUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("errorImageUrl") + .HasDefaultValueSql("'/static-assets/badges/error.png'::character varying"); + + b.Property("ExperimentalFeatures") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("experimentalFeatures") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("FeedbackUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("feedbackUrl") + .HasDefaultValueSql("'https://iceshrimp.dev/iceshrimp/iceshrimp/issues/new'::character varying"); + + b.Property("GithubClientId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("githubClientId"); + + b.Property("GithubClientSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("githubClientSecret"); + + b.Property("HcaptchaSecretKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("hcaptchaSecretKey"); + + b.Property("HcaptchaSiteKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("hcaptchaSiteKey"); + + b.Property>("HiddenTags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("hiddenTags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("IconUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("iconUrl"); + + b.Property>("Langs") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(64)[]") + .HasColumnName("langs") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("LibreTranslateApiKey") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("libreTranslateApiKey"); + + b.Property("LibreTranslateApiUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("libreTranslateApiUrl"); + + b.Property("LocalDriveCapacityMb") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1024) + .HasColumnName("localDriveCapacityMb") + .HasComment("Drive capacity of a local user (MB)"); + + b.Property("LogoImageUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("logoImageUrl"); + + b.Property("MaintainerEmail") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerEmail"); + + b.Property("MaintainerName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("maintainerName"); + + b.Property("MascotImageUrl") + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("mascotImageUrl") + .HasDefaultValueSql("'/static-assets/badges/info.png'::character varying"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name"); + + b.Property("ObjectStorageAccessKey") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageAccessKey"); + + b.Property("ObjectStorageBaseUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageBaseUrl"); + + b.Property("ObjectStorageBucket") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageBucket"); + + b.Property("ObjectStorageEndpoint") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageEndpoint"); + + b.Property("ObjectStoragePort") + .HasColumnType("integer") + .HasColumnName("objectStoragePort"); + + b.Property("ObjectStoragePrefix") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStoragePrefix"); + + b.Property("ObjectStorageRegion") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageRegion"); + + b.Property("ObjectStorageS3forcePathStyle") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageS3ForcePathStyle"); + + b.Property("ObjectStorageSecretKey") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("objectStorageSecretKey"); + + b.Property("ObjectStorageSetPublicRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("objectStorageSetPublicRead"); + + b.Property("ObjectStorageUseProxy") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageUseProxy"); + + b.Property("ObjectStorageUseSsl") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("objectStorageUseSSL"); + + b.Property("PinnedClipId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pinnedClipId"); + + b.Property>("PinnedPages") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(512)[]") + .HasColumnName("pinnedPages") + .HasDefaultValueSql("'{/featured,/channels,/explore,/pages,/about-iceshrimp}'::character varying[]"); + + b.Property>("PinnedUsers") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("pinnedUsers") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("PrivateMode") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("privateMode"); + + b.Property("RecaptchaSecretKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("recaptchaSecretKey"); + + b.Property("RecaptchaSiteKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("recaptchaSiteKey"); + + b.Property>("RecommendedInstances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("recommendedInstances") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("RemoteDriveCapacityMb") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(32) + .HasColumnName("remoteDriveCapacityMb") + .HasComment("Drive capacity of a remote user (MB)"); + + b.Property("RepositoryUrl") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("repositoryUrl") + .HasDefaultValueSql("'https://iceshrimp.dev/iceshrimp/iceshrimp'::character varying"); + + b.Property("SecureMode") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("secureMode"); + + b.Property>("SilencedHosts") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("silencedHosts") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("SmtpHost") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("smtpHost"); + + b.Property("SmtpPass") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("smtpPass"); + + b.Property("SmtpPort") + .HasColumnType("integer") + .HasColumnName("smtpPort"); + + b.Property("SmtpSecure") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("smtpSecure"); + + b.Property("SmtpUser") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("smtpUser"); + + b.Property("SummalyProxy") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("summalyProxy"); + + b.Property("SwPrivateKey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("swPrivateKey"); + + b.Property("SwPublicKey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("swPublicKey"); + + b.Property("ThemeColor") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("themeColor"); + + b.Property("ToSurl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("ToSUrl"); + + b.Property("UseObjectStorage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("useObjectStorage"); + + b.HasKey("Id") + .HasName("PK_c4c17a6c2bd7651338b60fc590b"); + + b.ToTable("meta"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ModerationLog", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the ModerationLog."); + + b.Property("Info") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("info"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("type"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_d0adca6ecfd068db83e4526cc26"); + + b.HasIndex(new[] { "UserId" }, "IDX_a08ad074601d204e0f69da9a95"); + + b.ToTable("moderation_log"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Muting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Muting."); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("MuteeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muteeId") + .HasComment("The mutee user ID."); + + b.Property("MuterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muterId") + .HasComment("The muter user ID."); + + b.HasKey("Id") + .HasName("PK_2e92d06c8b5c602eeb27ca9ba48"); + + b.HasIndex(new[] { "MuterId", "MuteeId" }, "IDX_1eb9d9824a630321a29fd3b290") + .IsUnique(); + + b.HasIndex(new[] { "MuterId" }, "IDX_93060675b4a79a577f31d260c6"); + + b.HasIndex(new[] { "ExpiresAt" }, "IDX_c1fd1c3dfb0627aa36c253fd14"); + + b.HasIndex(new[] { "MuteeId" }, "IDX_ec96b4fed9dae517e0dbbe0675"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_f86d57fbca33c7a4e6897490cc"); + + b.ToTable("muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property>("AttachedFileTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("attachedFileTypes") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("ChannelId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("channelId") + .HasComment("The ID of source channel."); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Note."); + + b.Property("Cw") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("cw"); + + b.Property>("Emojis") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("emojis") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("HasPoll") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hasPoll"); + + b.Property("LocalOnly") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("localOnly"); + + b.Property("MentionedRemoteUsers") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasColumnName("mentionedRemoteUsers") + .HasDefaultValueSql("'[]'::text"); + + b.Property>("Mentions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("mentions") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Reactions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("reactions") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("RenoteCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("renoteCount"); + + b.Property("RenoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("renoteId") + .HasComment("The ID of renote target."); + + b.Property("RenoteUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("renoteUserHost") + .HasComment("[Denormalized]"); + + b.Property("RenoteUserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("renoteUserId") + .HasComment("[Denormalized]"); + + b.Property("RepliesCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0) + .HasColumnName("repliesCount"); + + b.Property("ReplyId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("replyId") + .HasComment("The ID of reply target."); + + b.Property("ReplyUserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("replyUserHost") + .HasComment("[Denormalized]"); + + b.Property("ReplyUserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("replyUserId") + .HasComment("[Denormalized]"); + + b.Property("Score") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("score"); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Text") + .HasColumnType("text") + .HasColumnName("text"); + + b.Property("ThreadId") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("threadId"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Note."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of a note. it will be null when the note is local."); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("The human readable url of a note. it will be null when the note is local."); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.Property("Visibility") + .HasColumnType("note_visibility_enum") + .HasColumnName("visibility"); + + b.Property>("VisibleUserIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("visibleUserIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.HasKey("Id") + .HasName("PK_96d0c172a4fba276b1bbed43058"); + + b.HasIndex(new[] { "Uri" }, "IDX_153536c67d05e9adb24e99fc2b") + .IsUnique(); + + b.HasIndex(new[] { "ReplyId" }, "IDX_17cb3553c700a4985dff5a30ff"); + + b.HasIndex(new[] { "AttachedFileTypes" }, "IDX_25dfc71b0369b003a4cd434d0b"); + + b.HasIndex(new[] { "FileIds" }, "IDX_51c063b6a133a9cb87145450f5"); + + b.HasIndex(new[] { "RenoteId" }, "IDX_52ccc804d7c69037d558bac4c9"); + + b.HasIndex(new[] { "Mentions" }, "IDX_54ebcb6d27222913b908d56fd8"); + + b.HasIndex(new[] { "UserId" }, "IDX_5b87d9d19127bd5d92026017a7"); + + b.HasIndex(new[] { "UserHost" }, "IDX_7125a826ab192eb27e11d358a5"); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_796a8c03959361f97dc2be1d5c"); + + b.HasIndex(new[] { "Tags" }, "IDX_88937d94d7443d9a99a76fa5c0"); + + b.HasIndex(new[] { "Mentions" }, "IDX_NOTE_MENTIONS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Mentions" }, "IDX_NOTE_MENTIONS"), "gin"); + + b.HasIndex(new[] { "Tags" }, "IDX_NOTE_TAGS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Tags" }, "IDX_NOTE_TAGS"), "gin"); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_NOTE_VISIBLE_USER_IDS"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "VisibleUserIds" }, "IDX_NOTE_VISIBLE_USER_IDS"), "gin"); + + b.HasIndex(new[] { "ThreadId" }, "IDX_d4ebdef929896d6dc4a3c5bb48"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e7c0567f5261063592f022e9b5"); + + b.HasIndex(new[] { "ChannelId" }, "IDX_f22169eb10657bded6d875ac8f"); + + b.HasIndex(new[] { "CreatedAt", "UserId" }, "IDX_note_createdAt_userId"); + + b.HasIndex(new[] { "Id", "UserHost" }, "IDX_note_id_userHost"); + + b.HasIndex(new[] { "Url" }, "IDX_note_url"); + + b.HasIndex(new[] { "UserId", "Id" }, "IDX_note_userId_id"); + + b.HasIndex(new[] { "Text" }, "note_text_fts_idx"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex(new[] { "Text" }, "note_text_fts_idx"), "gin"); + NpgsqlIndexBuilderExtensions.HasOperators(b.HasIndex(new[] { "Text" }, "note_text_fts_idx"), new[] { "gin_trgm_ops" }); + + b.ToTable("note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteEdit", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Cw") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("cw"); + + b.Property>("FileIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("fileIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The ID of note."); + + b.Property("Text") + .HasColumnType("text") + .HasColumnName("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Note."); + + b.HasKey("Id") + .HasName("PK_736fc6e0d4e222ecc6f82058e08"); + + b.HasIndex(new[] { "NoteId" }, "IDX_702ad5ae993a672e4fbffbcd38"); + + b.ToTable("note_edit"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteFavorite", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteFavorite."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_af0da35a60b9fa4463a62082b36"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_0f4fb9ad355f3effff221ef245") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_47f4b1892f5d6ba8efb3057d81"); + + b.ToTable("note_favorite"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteReaction", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteReaction."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("Reaction") + .IsRequired() + .HasMaxLength(260) + .HasColumnType("character varying(260)") + .HasColumnName("reaction"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_767ec729b108799b587a3fcc9cf"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_01f4581f114e0ebd2bbb876f0b"); + + b.HasIndex(new[] { "UserId" }, "IDX_13761f64257f40c5636d0ff95e"); + + b.HasIndex(new[] { "NoteId" }, "IDX_45145e4953780f3cd5656f0ea6"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_ad0c221b25672daf2df320a817") + .IsUnique(); + + b.ToTable("note_reaction"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteThreadMuting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("ThreadId") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("threadId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_ec5936d94d1a0369646d12a3a47"); + + b.HasIndex(new[] { "UserId" }, "IDX_29c11c7deb06615076f8c95b80"); + + b.HasIndex(new[] { "UserId", "ThreadId" }, "IDX_ae7aab18a2641d3e5f25e0c4ea") + .IsUnique(); + + b.HasIndex(new[] { "ThreadId" }, "IDX_c426394644267453e76f036926"); + + b.ToTable("note_thread_muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteUnread", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("IsMentioned") + .HasColumnType("boolean") + .HasColumnName("isMentioned"); + + b.Property("IsSpecified") + .HasColumnType("boolean") + .HasColumnName("isSpecified"); + + b.Property("NoteChannelId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteChannelId") + .HasComment("[Denormalized]"); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("NoteUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteUserId") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_1904eda61a784f57e6e51fa9c1f"); + + b.HasIndex(new[] { "IsMentioned" }, "IDX_25b1dd384bec391b07b74b861c"); + + b.HasIndex(new[] { "NoteUserId" }, "IDX_29e8c1d579af54d4232939f994"); + + b.HasIndex(new[] { "UserId" }, "IDX_56b0166d34ddae49d8ef7610bb"); + + b.HasIndex(new[] { "NoteChannelId" }, "IDX_6a57f051d82c6d4036c141e107"); + + b.HasIndex(new[] { "IsSpecified" }, "IDX_89a29c9237b8c3b6b3cbb4cb30"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_d908433a4953cc13216cd9c274") + .IsUnique(); + + b.HasIndex(new[] { "NoteId" }, "IDX_e637cba4dc4410218c4251260e"); + + b.ToTable("note_unread"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteWatching", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the NoteWatching."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId") + .HasComment("The target Note ID."); + + b.Property("NoteUserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteUserId") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The watcher ID."); + + b.HasKey("Id") + .HasName("PK_49286fdb23725945a74aa27d757"); + + b.HasIndex(new[] { "NoteId" }, "IDX_03e7028ab8388a3f5e3ce2a861"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_318cdf42a9cfc11f479bd802bb"); + + b.HasIndex(new[] { "NoteUserId" }, "IDX_44499765eec6b5489d72c4253b"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_a42c93c69989ce1d09959df4cf") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_b0134ec406e8d09a540f818288"); + + b.ToTable("note_watching"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Notification", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AppAccessTokenId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appAccessTokenId"); + + b.Property("Choice") + .HasColumnType("integer") + .HasColumnName("choice"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Notification."); + + b.Property("CustomBody") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("customBody"); + + b.Property("CustomHeader") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("customHeader"); + + b.Property("CustomIcon") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("customIcon"); + + b.Property("FollowRequestId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("followRequestId"); + + b.Property("IsRead") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isRead") + .HasComment("Whether the notification was read."); + + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("NotifieeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("notifieeId") + .HasComment("The ID of recipient user of the Notification."); + + b.Property("NotifierId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("notifierId") + .HasComment("The ID of sender user of the Notification."); + + b.Property("Reaction") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("reaction"); + + b.Property("Type") + .HasColumnType("notification_type_enum") + .HasColumnName("type") + .HasComment("The type of the Notification."); + + b.Property("UserGroupInvitationId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupInvitationId"); + + b.HasKey("Id") + .HasName("PK_705b6c7cdf9b2c2ff7ac7872cb7"); + + b.HasIndex("FollowRequestId"); + + b.HasIndex("NoteId"); + + b.HasIndex("UserGroupInvitationId"); + + b.HasIndex(new[] { "IsRead" }, "IDX_080ab397c379af09b9d2169e5b"); + + b.HasIndex(new[] { "Type" }, "IDX_33f33cc8ef29d805a97ff4628b"); + + b.HasIndex(new[] { "NotifierId" }, "IDX_3b4e96eec8d36a8bbb9d02aa71"); + + b.HasIndex(new[] { "NotifieeId" }, "IDX_3c601b70a1066d2c8b517094cb"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_b11a5e627c41d4dc3170f1d370"); + + b.HasIndex(new[] { "AppAccessTokenId" }, "IDX_e22bf6bda77b6adc1fd9e75c8c"); + + b.ToTable("notification"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthApp", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("ClientId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("clientId") + .HasComment("The client id of the OAuth application"); + + b.Property("ClientSecret") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("clientSecret") + .HasComment("The client secret of the OAuth application"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth application"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the OAuth application"); + + b.Property>("RedirectUris") + .IsRequired() + .HasColumnType("character varying(512)[]") + .HasColumnName("redirectUris") + .HasComment("The redirect URIs of the OAuth application"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("scopes") + .HasComment("The scopes requested by the OAuth application"); + + b.Property("Website") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("website") + .HasComment("The website of the OAuth application"); + + b.HasKey("Id") + .HasName("PK_3256b97c0a3ee2d67240805dca4"); + + b.HasIndex(new[] { "ClientId" }, "IDX_65b61f406c811241e1315a2f82") + .IsUnique(); + + b.ToTable("oauth_app"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthToken", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .HasColumnType("boolean") + .HasColumnName("active") + .HasComment("Whether or not the token has been activated"); + + b.Property("AppId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("appId"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("code") + .HasComment("The auth code for the OAuth token"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth token"); + + b.Property("RedirectUri") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("redirectUri") + .HasComment("The redirect URI of the OAuth token"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("character varying(64)[]") + .HasColumnName("scopes") + .HasComment("The scopes requested by the OAuth token"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("token") + .HasComment("The OAuth token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_7e6a25a3cc4395d1658f5b89c73"); + + b.HasIndex("AppId"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_2cbeb4b389444bcf4379ef4273"); + + b.HasIndex(new[] { "Code" }, "IDX_dc5fe174a8b59025055f0ec136"); + + b.ToTable("oauth_token"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AlignCenter") + .HasColumnType("boolean") + .HasColumnName("alignCenter"); + + b.Property("Content") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("content") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Page."); + + b.Property("EyeCatchingImageId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("eyeCatchingImageId"); + + b.Property("Font") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("font"); + + b.Property("HideTitleWhenPinned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideTitleWhenPinned"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("isPublic"); + + b.Property("LikedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("likedCount"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("Script") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(16384) + .HasColumnType("character varying(16384)") + .HasColumnName("script") + .HasDefaultValueSql("''::character varying"); + + b.Property("Summary") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("summary"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("title"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the Page."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of author."); + + b.Property("Variables") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("variables") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("Visibility") + .HasColumnType("page_visibility_enum") + .HasColumnName("visibility"); + + b.Property>("VisibleUserIds") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(32)[]") + .HasColumnName("visibleUserIds") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.HasKey("Id") + .HasName("PK_742f4117e065c5b6ad21b37ba1f"); + + b.HasIndex("EyeCatchingImageId"); + + b.HasIndex(new[] { "UserId", "Name" }, "IDX_2133ef8317e4bdb839c0dcbf13") + .IsUnique(); + + b.HasIndex(new[] { "VisibleUserIds" }, "IDX_90148bbc2bf0854428786bfc15"); + + b.HasIndex(new[] { "UserId" }, "IDX_ae1d917992dd0c9d9bbdad06c4"); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_af639b066dfbca78b01a920f8a"); + + b.HasIndex(new[] { "Name" }, "IDX_b82c19c08afb292de4600d99e4"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_fbb4297c927a9b85e9cefa2eb1"); + + b.ToTable("page"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PageLike", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("PageId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pageId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_813f034843af992d3ae0f43c64c"); + + b.HasIndex("PageId"); + + b.HasIndex(new[] { "UserId" }, "IDX_0e61efab7f88dbb79c9166dbb4"); + + b.HasIndex(new[] { "UserId", "PageId" }, "IDX_4ce6fb9c70529b4c8ac46c9bfa") + .IsUnique(); + + b.ToTable("page_like"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PasswordResetRequest", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_fcf4b02eae1403a2edaf87fd074"); + + b.HasIndex(new[] { "Token" }, "IDX_0b575fa9a4cfe638a925949285") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_4bb7fd4a34492ae0e6cc8d30ac"); + + b.ToTable("password_reset_request"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Poll", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property>("Choices") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(256)[]") + .HasColumnName("choices") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("Multiple") + .HasColumnType("boolean") + .HasColumnName("multiple"); + + b.Property("NoteVisibility") + .HasColumnType("poll_notevisibility_enum") + .HasColumnName("noteVisibility") + .HasComment("[Denormalized]"); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("[Denormalized]"); + + b.Property>("Votes") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("votes"); + + b.HasKey("NoteId") + .HasName("PK_da851e06d0dfe2ef397d8b1bf1b"); + + b.HasIndex(new[] { "UserId" }, "IDX_0610ebcfcfb4a18441a9bcdab2"); + + b.HasIndex(new[] { "UserHost" }, "IDX_7fa20a12319c7f6dc3aed98c0a"); + + b.ToTable("poll"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PollVote", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Choice") + .HasColumnType("integer") + .HasColumnName("choice"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the PollVote."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_fd002d371201c472490ba89c6a0"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_0fb627e1c2f753262a74f0562d"); + + b.HasIndex(new[] { "UserId", "NoteId", "Choice" }, "IDX_50bd7164c5b78f1f4a42c4d21f") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_66d2bd2ee31d14bcc23069a89f"); + + b.HasIndex(new[] { "NoteId" }, "IDX_aecfbd5ef60374918e63ee95fa"); + + b.ToTable("poll_vote"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoNote", b => + { + b.Property("NoteId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiresAt"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("[Denormalized]"); + + b.HasKey("NoteId") + .HasName("PK_e263909ca4fe5d57f8d4230dd5c"); + + b.HasIndex(new[] { "UserId" }, "IDX_83f0862e9bae44af52ced7099e"); + + b.ToTable("promo_note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoRead", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the PromoRead."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_61917c1541002422b703318b7c9"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_2882b8a1a07c7d281a98b6db16") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_9657d55550c3d37bfafaf7d4b0"); + + b.ToTable("promo_read"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistrationTicket", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.HasKey("Id") + .HasName("PK_f11696b6fafcf3662d4292734f8"); + + b.HasIndex(new[] { "Code" }, "IDX_0ff69e8dfa9fe31bb4a4660f59") + .IsUnique(); + + b.ToTable("registration_ticket"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistryItem", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the RegistryItem."); + + b.Property("Domain") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("domain"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("key") + .HasComment("The key of the RegistryItem."); + + b.Property>("Scope") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(1024)[]") + .HasColumnName("scope") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the RegistryItem."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.Property("Value") + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("value") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The value of the RegistryItem."); + + b.HasKey("Id") + .HasName("PK_64b3f7e6008b4d89b826cd3af95"); + + b.HasIndex(new[] { "Domain" }, "IDX_0a72bdfcdb97c0eca11fe7ecad"); + + b.HasIndex(new[] { "Scope" }, "IDX_22baca135bb8a3ea1a83d13df3"); + + b.HasIndex(new[] { "UserId" }, "IDX_fb9d21ba0abb83223263df6bcb"); + + b.ToTable("registry_item"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Relay", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Inbox") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("inbox"); + + b.Property("Status") + .HasColumnType("relay_status_enum") + .HasColumnName("status"); + + b.HasKey("Id") + .HasName("PK_78ebc9cfddf4292633b7ba57aee"); + + b.HasIndex(new[] { "Inbox" }, "IDX_0d9a1738f2cf7f3b1c3334dfab") + .IsUnique(); + + b.ToTable("relay"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RenoteMuting", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Muting."); + + b.Property("MuteeId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muteeId") + .HasComment("The mutee user ID."); + + b.Property("MuterId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("muterId") + .HasComment("The muter user ID."); + + b.HasKey("Id") + .HasName("PK_renoteMuting_id"); + + b.HasIndex(new[] { "MuterId", "MuteeId" }, "IDX_0d801c609cec4e9eb4b6b4490c") + .IsUnique(); + + b.HasIndex(new[] { "MuterId" }, "IDX_7aa72a5fe76019bfe8e5e0e8b7"); + + b.HasIndex(new[] { "MuteeId" }, "IDX_7eac97594bcac5ffcf2068089b"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_d1259a2c2b7bb413ff449e8711"); + + b.ToTable("renote_muting"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Session", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .HasColumnType("boolean") + .HasColumnName("active") + .HasComment("Whether or not the token has been activated (i.e. 2fa has been confirmed)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the OAuth token"); + + b.Property("Token") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("token") + .HasComment("The authorization token"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_f55da76ac1c3ac420f444d2ff11"); + + b.HasIndex("UserId"); + + b.HasIndex(new[] { "Token" }, "IDX_232f8e85d7633bd6ddfad42169"); + + b.ToTable("session"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Signin", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Signin."); + + b.Property("Headers") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("headers"); + + b.Property("Ip") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ip"); + + b.Property("Success") + .HasColumnType("boolean") + .HasColumnName("success"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_9e96ddc025712616fc492b3b588"); + + b.HasIndex(new[] { "UserId" }, "IDX_2c308dbdc50d94dc625670055f"); + + b.ToTable("signin"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.SwSubscription", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Auth") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("auth"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Endpoint") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("endpoint"); + + b.Property("Publickey") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("publickey"); + + b.Property("SendReadMessage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("sendReadMessage"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_e8f763631530051b95eb6279b91"); + + b.HasIndex(new[] { "UserId" }, "IDX_97754ca6f2baff9b4abb7f853d"); + + b.ToTable("sw_subscription"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UsedUsername", b => + { + b.Property("Username") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.HasKey("Username") + .HasName("PK_78fd79d2d24c6ac2f4cc9a31a5d"); + + b.ToTable("used_username"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("AlsoKnownAs") + .HasColumnType("text") + .HasColumnName("alsoKnownAs") + .HasComment("URIs the user is known as too"); + + b.Property("AvatarBlurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("avatarBlurhash") + .HasComment("The blurhash of the avatar DriveFile"); + + b.Property("AvatarId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("avatarId") + .HasComment("The ID of avatar DriveFile."); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("avatarUrl") + .HasComment("The URL of the avatar DriveFile"); + + b.Property("BannerBlurhash") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("bannerBlurhash") + .HasComment("The blurhash of the banner DriveFile"); + + b.Property("BannerId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("bannerId") + .HasComment("The ID of banner DriveFile."); + + b.Property("BannerUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("bannerUrl") + .HasComment("The URL of the banner DriveFile"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the User."); + + b.Property("DriveCapacityOverrideMb") + .HasColumnType("integer") + .HasColumnName("driveCapacityOverrideMb") + .HasComment("Overrides user drive capacity limit"); + + b.Property>("Emojis") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("emojis") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Featured") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("featured") + .HasComment("The featured URL of the User. It will be null if the origin of the user is local."); + + b.Property("FollowersCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followersCount") + .HasComment("The count of followers."); + + b.Property("FollowersUri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("followersUri") + .HasComment("The URI of the user Follower Collection. It will be null if the origin of the user is local."); + + b.Property("FollowingCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("followingCount") + .HasComment("The count of following."); + + b.Property("HideOnlineStatus") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideOnlineStatus"); + + b.Property("Host") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("host") + .HasComment("The host of the User. It will be null if the origin of the user is local."); + + b.Property("Inbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("inbox") + .HasComment("The inbox URL of the User. It will be null if the origin of the user is local."); + + b.Property("IsAdmin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isAdmin") + .HasComment("Whether the User is the admin."); + + b.Property("IsBot") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isBot") + .HasComment("Whether the User is a bot."); + + b.Property("IsCat") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isCat") + .HasComment("Whether the User is a cat."); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isDeleted") + .HasComment("Whether the User is deleted."); + + b.Property("IsExplorable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("isExplorable") + .HasComment("Whether the User is explorable."); + + b.Property("IsLocked") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isLocked") + .HasComment("Whether the User is locked."); + + b.Property("IsModerator") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isModerator") + .HasComment("Whether the User is a moderator."); + + b.Property("IsSilenced") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSilenced") + .HasComment("Whether the User is silenced."); + + b.Property("IsSuspended") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isSuspended") + .HasComment("Whether the User is suspended."); + + b.Property("LastActiveDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastActiveDate"); + + b.Property("LastFetchedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastFetchedAt"); + + b.Property("MovedToUri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("movedToUri") + .HasComment("The URI of the new account of the User"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the User."); + + b.Property("NotesCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("notesCount") + .HasComment("The count of notes."); + + b.Property("SharedInbox") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("sharedInbox") + .HasComment("The sharedInbox URL of the User. It will be null if the origin of the user is local."); + + b.Property("SpeakAsCat") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("speakAsCat") + .HasComment("Whether to speak as a cat if isCat."); + + b.Property>("Tags") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("tags") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Token") + .HasMaxLength(16) + .HasColumnType("character(16)") + .HasColumnName("token") + .IsFixedLength() + .HasComment("The native access token of the User. It will be null if the origin of the user is local."); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("updatedAt") + .HasComment("The updated date of the User."); + + b.Property("Uri") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("uri") + .HasComment("The URI of the User. It will be null if the origin of the user is local."); + + b.Property("Username") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username") + .HasComment("The username of the User."); + + b.Property("UsernameLower") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("usernameLower") + .HasComment("The username (lowercased) of the User."); + + b.HasKey("Id") + .HasName("PK_cace4a159ff9f2512dd42373760"); + + b.HasIndex(new[] { "Host" }, "IDX_3252a5df8d5bbd16b281f7799e"); + + b.HasIndex(new[] { "UsernameLower", "Host" }, "IDX_5deb01ae162d1d70b80d064c27") + .IsUnique(); + + b.HasIndex(new[] { "UpdatedAt" }, "IDX_80ca6e6ef65fb9ef34ea8c90f4"); + + b.HasIndex(new[] { "UsernameLower" }, "IDX_a27b942a0d6dcff90e3ee9b5e8"); + + b.HasIndex(new[] { "Token" }, "IDX_a854e557b1b14814750c7c7b0c") + .IsUnique(); + + b.HasIndex(new[] { "Uri" }, "IDX_be623adaa4c566baf5d29ce0c8"); + + b.HasIndex(new[] { "LastActiveDate" }, "IDX_c8cc87bd0f2f4487d17c651fbf"); + + b.HasIndex(new[] { "IsExplorable" }, "IDX_d5a1b83c7cab66f167e6888188"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_e11e649824a45d8ed01d597fd9"); + + b.HasIndex(new[] { "Tags" }, "IDX_fa99d777623947a5b05f394cae"); + + b.HasIndex(new[] { "AvatarId" }, "REL_58f5c71eaab331645112cf8cfa") + .IsUnique(); + + b.HasIndex(new[] { "BannerId" }, "REL_afc64b53f8db3707ceb34eb28e") + .IsUnique(); + + b.HasIndex(new[] { "Token" }, "UQ_a854e557b1b14814750c7c7b0c9") + .IsUnique(); + + b.ToTable("user"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroup."); + + b.Property("IsPrivate") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("isPrivate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("name"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The ID of owner."); + + b.HasKey("Id") + .HasName("PK_3c29fba6fe013ec8724378ce7c9"); + + b.HasIndex(new[] { "CreatedAt" }, "IDX_20e30aa35180e317e133d75316"); + + b.HasIndex(new[] { "UserId" }, "IDX_3d6b372788ab01be58853003c9"); + + b.ToTable("user_group"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroupInvitation."); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId") + .HasComment("The group ID."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.HasKey("Id") + .HasName("PK_160c63ec02bf23f6a5c5e8140d6"); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_5cc8c468090e129857e9fecce5"); + + b.HasIndex(new[] { "UserId" }, "IDX_bfbc6305547539369fe73eb144"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_e9793f65f504e5a31fbaedbf2f") + .IsUnique(); + + b.ToTable("user_group_invitation"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvite", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_3893884af0d3a5f4d01e7921a97"); + + b.HasIndex(new[] { "UserId" }, "IDX_1039988afa3bf991185b277fe0"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_78787741f9010886796f2320a4") + .IsUnique(); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_e10924607d058004304611a436"); + + b.ToTable("user_group_invite"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserGroupJoining."); + + b.Property("UserGroupId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userGroupId") + .HasComment("The group ID."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.HasKey("Id") + .HasName("PK_15f2425885253c5507e1599cfe7"); + + b.HasIndex(new[] { "UserGroupId" }, "IDX_67dc758bc0566985d1b3d39986"); + + b.HasIndex(new[] { "UserId", "UserGroupId" }, "IDX_d9ecaed8c6dc43f3592c229282") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_f3a1b4bd0c7cabba958a0c0b23"); + + b.ToTable("user_group_joining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("PrivateKey") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("privateKey"); + + b.Property("PublicKey") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("publicKey"); + + b.HasKey("UserId") + .HasName("PK_f4853eb41ab722fe05f81cedeb6"); + + b.ToTable("user_keypair"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserList."); + + b.Property("HideFromHomeTl") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("hideFromHomeTl") + .HasComment("Whether posts from list members should be hidden from the home timeline."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the UserList."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_87bab75775fd9b1ff822b656402"); + + b.HasIndex(new[] { "UserId" }, "IDX_b7fcefbdd1c18dce86687531f9"); + + b.ToTable("user_list"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserListJoining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserListJoining."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The user ID."); + + b.Property("UserListId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userListId") + .HasComment("The list ID."); + + b.HasKey("Id") + .HasName("PK_11abb3768da1c5f8de101c9df45"); + + b.HasIndex(new[] { "UserListId" }, "IDX_605472305f26818cc93d1baaa7"); + + b.HasIndex(new[] { "UserId", "UserListId" }, "IDX_90f7da835e4c10aca6853621e1") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_d844bfc6f3f523a05189076efa"); + + b.ToTable("user_list_joining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserNotePining", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the UserNotePinings."); + + b.Property("NoteId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("noteId"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_a6a2dad4ae000abce2ea9d9b103"); + + b.HasIndex("NoteId"); + + b.HasIndex(new[] { "UserId", "NoteId" }, "IDX_410cd649884b501c02d6e72738") + .IsUnique(); + + b.HasIndex(new[] { "UserId" }, "IDX_bfbc6f79ba4007b4ce5097f08d"); + + b.ToTable("user_note_pining"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPending", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("password"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("username"); + + b.HasKey("Id") + .HasName("PK_d4c84e013c98ec02d19b8fbbafa"); + + b.HasIndex(new[] { "Code" }, "IDX_4e5c4c99175638ec0761714ab0") + .IsUnique(); + + b.ToTable("user_pending"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserProfile", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("AlwaysMarkNsfw") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("alwaysMarkNsfw"); + + b.Property("AutoAcceptFollowed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("autoAcceptFollowed"); + + b.Property("Birthday") + .HasMaxLength(10) + .HasColumnType("character(10)") + .HasColumnName("birthday") + .IsFixedLength() + .HasComment("The birthday (YYYY-MM-DD) of the User."); + + b.Property("CarefulBot") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("carefulBot"); + + b.Property("ClientData") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("clientData") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The client-specific data of the User."); + + b.Property("Description") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("description") + .HasComment("The description (bio) of the User."); + + b.Property("Email") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("email") + .HasComment("The email address of the User."); + + b.Property("EmailNotificationTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("emailNotificationTypes") + .HasDefaultValueSql("'[\"follow\", \"receiveFollowRequest\", \"groupInvited\"]'::jsonb"); + + b.Property("EmailVerified") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("emailVerified"); + + b.Property("EmailVerifyCode") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("emailVerifyCode"); + + b.Property("EnableWordMute") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("enableWordMute"); + + b.Property("FFVisibility") + .ValueGeneratedOnAdd() + .HasColumnType("user_profile_ffvisibility_enum") + .HasDefaultValue(UserProfile.UserProfileFFVisibility.Public) + .HasColumnName("ffVisibility"); + + b.Property("Fields") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("fields") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("InjectFeaturedNote") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("injectFeaturedNote"); + + b.Property("Integrations") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("integrations") + .HasDefaultValueSql("'{}'::jsonb"); + + b.Property("Lang") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("lang"); + + b.Property("Location") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("location") + .HasComment("The location of the User."); + + b.Property("Mentions") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mentions") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property("ModerationNote") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(8192) + .HasColumnType("character varying(8192)") + .HasColumnName("moderationNote") + .HasDefaultValueSql("''::character varying"); + + b.Property("MutedInstances") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mutedInstances") + .HasDefaultValueSql("'[]'::jsonb") + .HasComment("List of instances muted by the user."); + + b.Property("MutedWords") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("mutedWords") + .HasDefaultValueSql("'[]'::jsonb"); + + b.Property>("MutingNotificationTypes") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("user_profile_mutingnotificationtypes_enum[]") + .HasColumnName("mutingNotificationTypes") + .HasDefaultValueSql("'{}'::public.user_profile_mutingnotificationtypes_enum[]"); + + b.Property("NoCrawle") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("noCrawle") + .HasComment("Whether reject index by crawler."); + + b.Property("Password") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("password") + .HasComment("The password hash of the User. It will be null if the origin of the user is local."); + + b.Property("PinnedPageId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("pinnedPageId"); + + b.Property("PreventAiLearning") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("preventAiLearning"); + + b.Property("PublicReactions") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("publicReactions"); + + b.Property("ReceiveAnnouncementEmail") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("receiveAnnouncementEmail"); + + b.Property("Room") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasColumnName("room") + .HasDefaultValueSql("'{}'::jsonb") + .HasComment("The room data of the User."); + + b.Property("SecurityKeysAvailable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("securityKeysAvailable"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("twoFactorEnabled"); + + b.Property("TwoFactorSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("twoFactorSecret"); + + b.Property("TwoFactorTempSecret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("twoFactorTempSecret"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("url") + .HasComment("Remote URL of the user."); + + b.Property("UsePasswordLessLogin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("usePasswordLessLogin"); + + b.Property("UserHost") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("userHost") + .HasComment("[Denormalized]"); + + b.HasKey("UserId") + .HasName("PK_51cb79b5555effaf7d69ba1cff9"); + + b.HasIndex(new[] { "EnableWordMute" }, "IDX_3befe6f999c86aff06eb0257b4"); + + b.HasIndex(new[] { "UserHost" }, "IDX_dce530b98e454793dac5ec2f5a"); + + b.HasIndex(new[] { "PinnedPageId" }, "UQ_6dc44f1ceb65b1e72bacef2ca27") + .IsUnique(); + + b.ToTable("user_profile"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", b => + { + b.Property("UserId") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.Property("KeyId") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("keyId"); + + b.Property("KeyPem") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("keyPem"); + + b.HasKey("UserId") + .HasName("PK_10c146e4b39b443ede016f6736d"); + + b.HasIndex(new[] { "KeyId" }, "IDX_171e64971c780ebd23fae140bb") + .IsUnique(); + + b.ToTable("user_publickey"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserSecurityKey", b => + { + b.Property("Id") + .HasColumnType("character varying") + .HasColumnName("id") + .HasComment("Variable-length id given to navigator.credentials.get()"); + + b.Property("LastUsed") + .HasColumnType("timestamp with time zone") + .HasColumnName("lastUsed") + .HasComment("The date of the last time the UserSecurityKey was successfully validated."); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("name") + .HasComment("User-defined name for this key"); + + b.Property("PublicKey") + .IsRequired() + .HasColumnType("character varying") + .HasColumnName("publicKey") + .HasComment("Variable-length public key used to verify attestations (hex-encoded)."); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId"); + + b.HasKey("Id") + .HasName("PK_3e508571121ab39c5f85d10c166"); + + b.HasIndex(new[] { "PublicKey" }, "IDX_0d7718e562dcedd0aa5cf2c9f7"); + + b.HasIndex(new[] { "UserId" }, "IDX_ff9ca3b5f3ee3d0681367a9b44"); + + b.ToTable("user_security_key"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Webhook", b => + { + b.Property("Id") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("id"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true) + .HasColumnName("active"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("createdAt") + .HasComment("The created date of the Antenna."); + + b.Property("LatestSentAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("latestSentAt"); + + b.Property("LatestStatus") + .HasColumnType("integer") + .HasColumnName("latestStatus"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("name") + .HasComment("The name of the Antenna."); + + b.Property>("On") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("character varying(128)[]") + .HasColumnName("on") + .HasDefaultValueSql("'{}'::character varying[]"); + + b.Property("Secret") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("secret"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("url"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("userId") + .HasComment("The owner ID."); + + b.HasKey("Id") + .HasName("PK_e6765510c2d078db49632b59020"); + + b.HasIndex(new[] { "Active" }, "IDX_5a056076f76b2efe08216ba655"); + + b.HasIndex(new[] { "On" }, "IDX_8063a0586ed1dfbe86e982d961"); + + b.HasIndex(new[] { "UserId" }, "IDX_f272c8c8805969e6a6449c77b3"); + + b.ToTable("webhook"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AbuseUserReport", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Assignee") + .WithMany("AbuseUserReportAssignees") + .HasForeignKey("AssigneeId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_08b883dd5fdd6f9c4c1572b36de"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Reporter") + .WithMany("AbuseUserReportReporters") + .HasForeignKey("ReporterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_04cc96756f89d0b7f9473e8cdf3"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "TargetUser") + .WithMany("AbuseUserReportTargetUsers") + .HasForeignKey("TargetUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a9021cc2e1feb5f72d3db6e9f5f"); + + b.Navigation("Assignee"); + + b.Navigation("Reporter"); + + b.Navigation("TargetUser"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.App", "App") + .WithMany("AccessTokens") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_a3ff16c90cc87a82a0b5959e560"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AccessTokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_9949557d0e1b2c19e5344c171e9"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AnnouncementRead", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Announcement", "Announcement") + .WithMany("AnnouncementReads") + .HasForeignKey("AnnouncementId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_603a7b1e7aa0533c6c88e9bfafe"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AnnouncementReads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8288151386172b8109f7239ab28"); + + b.Navigation("Announcement"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Antenna", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", "UserGroupJoining") + .WithMany("Antennas") + .HasForeignKey("UserGroupJoiningId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_ccbf5a8c0be4511133dcc50ddeb"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Antennas") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6446c571a0e8d0f05f01c789096"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserList", "UserList") + .WithMany("Antennas") + .HasForeignKey("UserListId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_709d7d32053d0dd7620f678eeb9"); + + b.Navigation("User"); + + b.Navigation("UserGroupJoining"); + + b.Navigation("UserList"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Apps") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_3f5b0899ef90527a3462d7c2cb3"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AttestationChallenge", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AttestationChallenges") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f1a461a618fa1755692d0e0d592"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AuthSession", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.App", "App") + .WithMany("AuthSessions") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_dbe037d4bddd17b03a1dc778dee"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("AuthSessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_c072b729d71697f959bde66ade0"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Blocking", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Blockee") + .WithMany("BlockingBlockees") + .HasForeignKey("BlockeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2cd4a2743a99671308f5417759e"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Blocker") + .WithMany("BlockingBlockers") + .HasForeignKey("BlockerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0627125f1a8a42c9a1929edb552"); + + b.Navigation("Blockee"); + + b.Navigation("Blocker"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Banner") + .WithMany("Channels") + .HasForeignKey("BannerId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_999da2bcc7efadbfe0e92d3bc19"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Channels") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_823bae55bd81b3be6e05cff4383"); + + b.Navigation("Banner"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelFollowing", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Followee") + .WithMany("ChannelFollowings") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e43068c3f92cab197c3d3cd86e"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("ChannelFollowings") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6d8084ec9496e7334a4602707e1"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ChannelNotePining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Channel") + .WithMany("ChannelNotePinings") + .HasForeignKey("ChannelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8125f950afd3093acb10d2db8a8"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("ChannelNotePinings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_10b19ef67d297ea9de325cd4502"); + + b.Navigation("Channel"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Clips") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2b5ec6c574d6802c94c80313fb2"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ClipNote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Clip", "Clip") + .WithMany("ClipNotes") + .HasForeignKey("ClipId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ebe99317bbbe9968a0c6f579adf"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("ClipNotes") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a012eaf5c87c65da1deb5fdbfa3"); + + b.Navigation("Clip"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", "Folder") + .WithMany("DriveFiles") + .HasForeignKey("FolderId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_bb90d1956dafc4068c28aa7560a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("DriveFiles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_860fa6f6c7df5bb887249fba22e"); + + b.Navigation("Folder"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", "Parent") + .WithMany("InverseParent") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_00ceffb0cdc238b3233294f08f2"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("DriveFolders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_f4fc06e49c0171c85f1c48060d2"); + + b.Navigation("Parent"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Followee") + .WithMany("FollowRequestFollowees") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_12c01c0d1a79f77d9f6c15fadd2"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("FollowRequestFollowers") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a7fd92dd6dc519e6fb435dd108f"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Following", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Followee") + .WithMany("FollowingFollowees") + .HasForeignKey("FolloweeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_24e0042143a18157b234df186c3"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Follower") + .WithMany("FollowingFollowers") + .HasForeignKey("FollowerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6516c5a6f3c015b4eed39978be5"); + + b.Navigation("Followee"); + + b.Navigation("Follower"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryLike", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", "Post") + .WithMany("GalleryLikes") + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b1cb568bfe569e47b7051699fc8"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("GalleryLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_8fd5215095473061855ceb948cf"); + + b.Navigation("Post"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("GalleryPosts") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_985b836dddd8615e432d7043ddb"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("HtmlNoteCacheEntry") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.HtmlNoteCacheEntry", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6ef86ec901b2017cbe82d3a8286"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("HtmlUserCacheEntry") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.HtmlUserCacheEntry", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_920b9474e3c9cae3f3c37c057e1"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.MessagingMessage", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "File") + .WithMany("MessagingMessages") + .HasForeignKey("FileId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_535def119223ac05ad3fa9ef64b"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "Group") + .WithMany("MessagingMessages") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_2c4be03b446884f9e9c502135be"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Recipient") + .WithMany("MessagingMessageRecipients") + .HasForeignKey("RecipientId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_cac14a4e3944454a5ce7daa5142"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("MessagingMessageUsers") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5377c307783fce2b6d352e1203b"); + + b.Navigation("File"); + + b.Navigation("Group"); + + b.Navigation("Recipient"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.ModerationLog", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("ModerationLogs") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a08ad074601d204e0f69da9a954"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Muting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Mutee") + .WithMany("MutingMutees") + .HasForeignKey("MuteeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ec96b4fed9dae517e0dbbe0675c"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Muter") + .WithMany("MutingMuters") + .HasForeignKey("MuterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_93060675b4a79a577f31d260c67"); + + b.Navigation("Mutee"); + + b.Navigation("Muter"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Channel", "Channel") + .WithMany("Notes") + .HasForeignKey("ChannelId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_f22169eb10657bded6d875ac8f9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Renote") + .WithMany("InverseRenote") + .HasForeignKey("RenoteId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_52ccc804d7c69037d558bac4c96"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Reply") + .WithMany("InverseReply") + .HasForeignKey("ReplyId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_17cb3553c700a4985dff5a30ff5"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Notes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5b87d9d19127bd5d92026017a7b"); + + b.Navigation("Channel"); + + b.Navigation("Renote"); + + b.Navigation("Reply"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteEdit", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteEdits") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_702ad5ae993a672e4fbffbcd38c"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteFavorite", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteFavorites") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e00498f180193423c992bc4370"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteFavorites") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_47f4b1892f5d6ba8efb3057d81a"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteReaction", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteReactions") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_45145e4953780f3cd5656f0ea6a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteReactions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_13761f64257f40c5636d0ff95ee"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteThreadMuting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteThreadMutings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_29c11c7deb06615076f8c95b80a"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteUnread", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteUnreads") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e637cba4dc4410218c4251260e4"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteUnreads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_56b0166d34ddae49d8ef7610bb9"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.NoteWatching", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("NoteWatchings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_03e7028ab8388a3f5e3ce2a8619"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("NoteWatchings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b0134ec406e8d09a540f8182888"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Notification", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.AccessToken", "AppAccessToken") + .WithMany("Notifications") + .HasForeignKey("AppAccessTokenId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_e22bf6bda77b6adc1fd9e75c8c9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", "FollowRequest") + .WithMany("Notifications") + .HasForeignKey("FollowRequestId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_bd7fab507621e635b32cd31892c"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("Notifications") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_769cb6b73a1efe22ddf733ac453"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Notifiee") + .WithMany("NotificationNotifiees") + .HasForeignKey("NotifieeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3c601b70a1066d2c8b517094cb9"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Notifier") + .WithMany("NotificationNotifiers") + .HasForeignKey("NotifierId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_3b4e96eec8d36a8bbb9d02aa710"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", "UserGroupInvitation") + .WithMany("Notifications") + .HasForeignKey("UserGroupInvitationId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_8fe87814e978053a53b1beb7e98"); + + b.Navigation("AppAccessToken"); + + b.Navigation("FollowRequest"); + + b.Navigation("Note"); + + b.Navigation("Notifiee"); + + b.Navigation("Notifier"); + + b.Navigation("UserGroupInvitation"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthToken", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.OauthApp", "App") + .WithMany("OauthTokens") + .HasForeignKey("AppId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_6d3ef28ea647b1449ba79690874"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("OauthTokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f6b4b1ac66b753feab5d831ba04"); + + b.Navigation("App"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "EyeCatchingImage") + .WithMany("Pages") + .HasForeignKey("EyeCatchingImageId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_a9ca79ad939bf06066b81c9d3aa"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Pages") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ae1d917992dd0c9d9bbdad06c4a"); + + b.Navigation("EyeCatchingImage"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PageLike", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Page", "Page") + .WithMany("PageLikes") + .HasForeignKey("PageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_cf8782626dced3176038176a847"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PageLikes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_0e61efab7f88dbb79c9166dbb48"); + + b.Navigation("Page"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PasswordResetRequest", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PasswordResetRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_4bb7fd4a34492ae0e6cc8d30ac8"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Poll", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("Poll") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.Poll", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_da851e06d0dfe2ef397d8b1bf1b"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PollVote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("PollVotes") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_aecfbd5ef60374918e63ee95fa7"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PollVotes") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_66d2bd2ee31d14bcc23069a89f8"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoNote", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithOne("PromoNote") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.PromoNote", "NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e263909ca4fe5d57f8d4230dd5c"); + + b.Navigation("Note"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.PromoRead", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("PromoReads") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_a46a1a603ecee695d7db26da5f4"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("PromoReads") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_9657d55550c3d37bfafaf7d4b05"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RegistryItem", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("RegistryItems") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_fb9d21ba0abb83223263df6bcb3"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.RenoteMuting", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Mutee") + .WithMany("RenoteMutingMutees") + .HasForeignKey("MuteeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_7eac97594bcac5ffcf2068089b6"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "Muter") + .WithMany("RenoteMutingMuters") + .HasForeignKey("MuterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_7aa72a5fe76019bfe8e5e0e8b7d"); + + b.Navigation("Mutee"); + + b.Navigation("Muter"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Session", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Sessions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3d2f174ef04fb312fdebd0ddc53"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Signin", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Signins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_2c308dbdc50d94dc625670055f7"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.SwSubscription", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("SwSubscriptions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_97754ca6f2baff9b4abb7f853dd"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Avatar") + .WithOne("UserAvatar") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.User", "AvatarId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_58f5c71eaab331645112cf8cfa5"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.DriveFile", "Banner") + .WithOne("UserBanner") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.User", "BannerId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_afc64b53f8db3707ceb34eb28e2"); + + b.Navigation("Avatar"); + + b.Navigation("Banner"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroups") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_3d6b372788ab01be58853003c93"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupInvitations") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_5cc8c468090e129857e9fecce5a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupInvitations") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_bfbc6305547539369fe73eb144a"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvite", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupInvites") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_e10924607d058004304611a436a"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupInvites") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_1039988afa3bf991185b277fe03"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserGroup", "UserGroup") + .WithMany("UserGroupJoinings") + .HasForeignKey("UserGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_67dc758bc0566985d1b3d399865"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserGroupJoinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f3a1b4bd0c7cabba958a0c0b231"); + + b.Navigation("User"); + + b.Navigation("UserGroup"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserKeypair") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserKeypair", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f4853eb41ab722fe05f81cedeb6"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserLists") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_b7fcefbdd1c18dce86687531f99"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserListJoining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserListJoinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_d844bfc6f3f523a05189076efaa"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.UserList", "UserList") + .WithMany("UserListJoinings") + .HasForeignKey("UserListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_605472305f26818cc93d1baaa74"); + + b.Navigation("User"); + + b.Navigation("UserList"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserNotePining", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Note", "Note") + .WithMany("UserNotePinings") + .HasForeignKey("NoteId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_68881008f7c3588ad7ecae471cf"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserNotePinings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_bfbc6f79ba4007b4ce5097f08d6"); + + b.Navigation("Note"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserProfile", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.Page", "PinnedPage") + .WithOne("UserProfile") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserProfile", "PinnedPageId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_6dc44f1ceb65b1e72bacef2ca27"); + + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserProfile") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserProfile", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_51cb79b5555effaf7d69ba1cff9"); + + b.Navigation("PinnedPage"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithOne("UserPublickey") + .HasForeignKey("Iceshrimp.Backend.Core.Database.Tables.UserPublickey", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_10c146e4b39b443ede016f6736d"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserSecurityKey", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("UserSecurityKeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_ff9ca3b5f3ee3d0681367a9b447"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Webhook", b => + { + b.HasOne("Iceshrimp.Backend.Core.Database.Tables.User", "User") + .WithMany("Webhooks") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_f272c8c8805969e6a6449c77b3c"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.AccessToken", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Announcement", b => + { + b.Navigation("AnnouncementReads"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.App", b => + { + b.Navigation("AccessTokens"); + + b.Navigation("AuthSessions"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Channel", b => + { + b.Navigation("ChannelFollowings"); + + b.Navigation("ChannelNotePinings"); + + b.Navigation("Notes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Clip", b => + { + b.Navigation("ClipNotes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFile", b => + { + b.Navigation("Channels"); + + b.Navigation("MessagingMessages"); + + b.Navigation("Pages"); + + b.Navigation("UserAvatar"); + + b.Navigation("UserBanner"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.DriveFolder", b => + { + b.Navigation("DriveFiles"); + + b.Navigation("InverseParent"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.FollowRequest", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.GalleryPost", b => + { + b.Navigation("GalleryLikes"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Note", b => + { + b.Navigation("ChannelNotePinings"); + + b.Navigation("ClipNotes"); + + b.Navigation("HtmlNoteCacheEntry"); + + b.Navigation("InverseRenote"); + + b.Navigation("InverseReply"); + + b.Navigation("NoteEdits"); + + b.Navigation("NoteFavorites"); + + b.Navigation("NoteReactions"); + + b.Navigation("NoteUnreads"); + + b.Navigation("NoteWatchings"); + + b.Navigation("Notifications"); + + b.Navigation("Poll"); + + b.Navigation("PollVotes"); + + b.Navigation("PromoNote"); + + b.Navigation("PromoReads"); + + b.Navigation("UserNotePinings"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.OauthApp", b => + { + b.Navigation("OauthTokens"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.Page", b => + { + b.Navigation("PageLikes"); + + b.Navigation("UserProfile"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.User", b => + { + b.Navigation("AbuseUserReportAssignees"); + + b.Navigation("AbuseUserReportReporters"); + + b.Navigation("AbuseUserReportTargetUsers"); + + b.Navigation("AccessTokens"); + + b.Navigation("AnnouncementReads"); + + b.Navigation("Antennas"); + + b.Navigation("Apps"); + + b.Navigation("AttestationChallenges"); + + b.Navigation("AuthSessions"); + + b.Navigation("BlockingBlockees"); + + b.Navigation("BlockingBlockers"); + + b.Navigation("ChannelFollowings"); + + b.Navigation("Channels"); + + b.Navigation("Clips"); + + b.Navigation("DriveFiles"); + + b.Navigation("DriveFolders"); + + b.Navigation("FollowRequestFollowees"); + + b.Navigation("FollowRequestFollowers"); + + b.Navigation("FollowingFollowees"); + + b.Navigation("FollowingFollowers"); + + b.Navigation("GalleryLikes"); + + b.Navigation("GalleryPosts"); + + b.Navigation("HtmlUserCacheEntry"); + + b.Navigation("MessagingMessageRecipients"); + + b.Navigation("MessagingMessageUsers"); + + b.Navigation("ModerationLogs"); + + b.Navigation("MutingMutees"); + + b.Navigation("MutingMuters"); + + b.Navigation("NoteFavorites"); + + b.Navigation("NoteReactions"); + + b.Navigation("NoteThreadMutings"); + + b.Navigation("NoteUnreads"); + + b.Navigation("NoteWatchings"); + + b.Navigation("Notes"); + + b.Navigation("NotificationNotifiees"); + + b.Navigation("NotificationNotifiers"); + + b.Navigation("OauthTokens"); + + b.Navigation("PageLikes"); + + b.Navigation("Pages"); + + b.Navigation("PasswordResetRequests"); + + b.Navigation("PollVotes"); + + b.Navigation("PromoReads"); + + b.Navigation("RegistryItems"); + + b.Navigation("RenoteMutingMutees"); + + b.Navigation("RenoteMutingMuters"); + + b.Navigation("Sessions"); + + b.Navigation("Signins"); + + b.Navigation("SwSubscriptions"); + + b.Navigation("UserGroupInvitations"); + + b.Navigation("UserGroupInvites"); + + b.Navigation("UserGroupJoinings"); + + b.Navigation("UserGroups"); + + b.Navigation("UserKeypair"); + + b.Navigation("UserListJoinings"); + + b.Navigation("UserLists"); + + b.Navigation("UserNotePinings"); + + b.Navigation("UserProfile"); + + b.Navigation("UserPublickey"); + + b.Navigation("UserSecurityKeys"); + + b.Navigation("Webhooks"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroup", b => + { + b.Navigation("MessagingMessages"); + + b.Navigation("UserGroupInvitations"); + + b.Navigation("UserGroupInvites"); + + b.Navigation("UserGroupJoinings"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupInvitation", b => + { + b.Navigation("Notifications"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserGroupJoining", b => + { + b.Navigation("Antennas"); + }); + + modelBuilder.Entity("Iceshrimp.Backend.Core.Database.Tables.UserList", b => + { + b.Navigation("Antennas"); + + b.Navigation("UserListJoinings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartActiveUser.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartActiveUser.cs deleted file mode 100644 index b2f99408..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartActiveUser.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__active_users")] -[Index("Date", Name = "IDX_0ad37b7ef50f4ddc84363d7ccc", IsUnique = true)] -[Index("Date", Name = "UQ_0ad37b7ef50f4ddc84363d7ccca", IsUnique = true)] -public class ChartActiveUser { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("unique_temp___registeredWithinWeek", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinWeek { get; set; } = null!; - - [Column("___registeredWithinWeek")] public short RegisteredWithinWeek { get; set; } - - [Column("unique_temp___registeredWithinMonth", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinMonth { get; set; } = null!; - - [Column("___registeredWithinMonth")] public short RegisteredWithinMonth { get; set; } - - [Column("unique_temp___registeredWithinYear", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinYear { get; set; } = null!; - - [Column("___registeredWithinYear")] public short RegisteredWithinYear { get; set; } - - [Column("unique_temp___registeredOutsideWeek", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideWeek { get; set; } = null!; - - [Column("___registeredOutsideWeek")] public short RegisteredOutsideWeek { get; set; } - - [Column("unique_temp___registeredOutsideMonth", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideMonth { get; set; } = null!; - - [Column("___registeredOutsideMonth")] public short RegisteredOutsideMonth { get; set; } - - [Column("unique_temp___registeredOutsideYear", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideYear { get; set; } = null!; - - [Column("___registeredOutsideYear")] public short RegisteredOutsideYear { get; set; } - - [Column("___readWrite")] public short ReadWrite { get; set; } - - [Column("unique_temp___read", TypeName = "character varying[]")] - public List UniqueTempRead { get; set; } = null!; - - [Column("___read")] public short Read { get; set; } - - [Column("unique_temp___write", TypeName = "character varying[]")] - public List UniqueTempWrite { get; set; } = null!; - - [Column("___write")] public short Write { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartApRequest.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartApRequest.cs deleted file mode 100644 index 773898ab..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartApRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__ap_request")] -[Index("Date", Name = "IDX_e56f4beac5746d44bc3e19c80d", IsUnique = true)] -[Index("Date", Name = "UQ_e56f4beac5746d44bc3e19c80d0", IsUnique = true)] -public class ChartApRequest { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___deliverFailed")] public int DeliverFailed { get; set; } - - [Column("___deliverSucceeded")] public int DeliverSucceeded { get; set; } - - [Column("___inboxReceived")] public int InboxReceived { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayActiveUser.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayActiveUser.cs deleted file mode 100644 index 3a7d3c0d..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayActiveUser.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__active_users")] -[Index("Date", Name = "IDX_d5954f3df5e5e3bdfc3c03f390", IsUnique = true)] -[Index("Date", Name = "UQ_d5954f3df5e5e3bdfc3c03f3906", IsUnique = true)] -public class ChartDayActiveUser { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("unique_temp___registeredWithinWeek", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinWeek { get; set; } = null!; - - [Column("___registeredWithinWeek")] public short RegisteredWithinWeek { get; set; } - - [Column("unique_temp___registeredWithinMonth", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinMonth { get; set; } = null!; - - [Column("___registeredWithinMonth")] public short RegisteredWithinMonth { get; set; } - - [Column("unique_temp___registeredWithinYear", TypeName = "character varying[]")] - public List UniqueTempRegisteredWithinYear { get; set; } = null!; - - [Column("___registeredWithinYear")] public short RegisteredWithinYear { get; set; } - - [Column("unique_temp___registeredOutsideWeek", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideWeek { get; set; } = null!; - - [Column("___registeredOutsideWeek")] public short RegisteredOutsideWeek { get; set; } - - [Column("unique_temp___registeredOutsideMonth", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideMonth { get; set; } = null!; - - [Column("___registeredOutsideMonth")] public short RegisteredOutsideMonth { get; set; } - - [Column("unique_temp___registeredOutsideYear", TypeName = "character varying[]")] - public List UniqueTempRegisteredOutsideYear { get; set; } = null!; - - [Column("___registeredOutsideYear")] public short RegisteredOutsideYear { get; set; } - - [Column("___readWrite")] public short ReadWrite { get; set; } - - [Column("unique_temp___read", TypeName = "character varying[]")] - public List UniqueTempRead { get; set; } = null!; - - [Column("___read")] public short Read { get; set; } - - [Column("unique_temp___write", TypeName = "character varying[]")] - public List UniqueTempWrite { get; set; } = null!; - - [Column("___write")] public short Write { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayApRequest.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayApRequest.cs deleted file mode 100644 index 0fd1f30d..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayApRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__ap_request")] -[Index("Date", Name = "IDX_a848f66d6cec11980a5dd59582", IsUnique = true)] -[Index("Date", Name = "UQ_a848f66d6cec11980a5dd595822", IsUnique = true)] -public class ChartDayApRequest { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___deliverFailed")] public int DeliverFailed { get; set; } - - [Column("___deliverSucceeded")] public int DeliverSucceeded { get; set; } - - [Column("___inboxReceived")] public int InboxReceived { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayDrive.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayDrive.cs deleted file mode 100644 index fe609a0f..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayDrive.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__drive")] -[Index("Date", Name = "IDX_0b60ebb3aa0065f10b0616c117", IsUnique = true)] -[Index("Date", Name = "UQ_0b60ebb3aa0065f10b0616c1171", IsUnique = true)] -public class ChartDayDrive { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_incCount")] public int LocalIncCount { get; set; } - - [Column("___local_incSize")] public int LocalIncSize { get; set; } - - [Column("___local_decCount")] public int LocalDecCount { get; set; } - - [Column("___local_decSize")] public int LocalDecSize { get; set; } - - [Column("___remote_incCount")] public int RemoteIncCount { get; set; } - - [Column("___remote_incSize")] public int RemoteIncSize { get; set; } - - [Column("___remote_decCount")] public int RemoteDecCount { get; set; } - - [Column("___remote_decSize")] public int RemoteDecSize { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayFederation.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayFederation.cs deleted file mode 100644 index f732cf9b..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayFederation.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__federation")] -[Index("Date", Name = "IDX_617a8fe225a6e701d89e02d2c7", IsUnique = true)] -[Index("Date", Name = "UQ_617a8fe225a6e701d89e02d2c74", IsUnique = true)] -public class ChartDayFederation { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("unique_temp___deliveredInstances", TypeName = "character varying[]")] - public List UniqueTempDeliveredInstances { get; set; } = null!; - - [Column("___deliveredInstances")] public short DeliveredInstances { get; set; } - - [Column("unique_temp___inboxInstances", TypeName = "character varying[]")] - public List UniqueTempInboxInstances { get; set; } = null!; - - [Column("___inboxInstances")] public short InboxInstances { get; set; } - - [Column("unique_temp___stalled", TypeName = "character varying[]")] - public List UniqueTempStalled { get; set; } = null!; - - [Column("___stalled")] public short Stalled { get; set; } - - [Column("___sub")] public short Sub { get; set; } - - [Column("___pub")] public short Pub { get; set; } - - [Column("___pubsub")] public short Pubsub { get; set; } - - [Column("___subActive")] public short SubActive { get; set; } - - [Column("___pubActive")] public short PubActive { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayHashtag.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayHashtag.cs deleted file mode 100644 index ff29dda6..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayHashtag.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__hashtag")] -[Index("Date", "Group", Name = "IDX_8f589cf056ff51f09d6096f645", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_8f589cf056ff51f09d6096f6450", IsUnique = true)] -public class ChartDayHashtag { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_users")] public int LocalUsers { get; set; } - - [Column("___remote_users")] public int RemoteUsers { get; set; } - - [Column("unique_temp___local_users", TypeName = "character varying[]")] - public List UniqueTempLocalUsers { get; set; } = null!; - - [Column("unique_temp___remote_users", TypeName = "character varying[]")] - public List UniqueTempRemoteUsers { get; set; } = null!; -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayInstance.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayInstance.cs deleted file mode 100644 index 5b9ae519..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayInstance.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__instance")] -[Index("Date", "Group", Name = "IDX_fea7c0278325a1a2492f2d6acb", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_fea7c0278325a1a2492f2d6acbf", IsUnique = true)] -public class ChartDayInstance { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___requests_failed")] public short RequestsFailed { get; set; } - - [Column("___requests_succeeded")] public short RequestsSucceeded { get; set; } - - [Column("___requests_received")] public short RequestsReceived { get; set; } - - [Column("___notes_total")] public int NotesTotal { get; set; } - - [Column("___notes_inc")] public int NotesInc { get; set; } - - [Column("___notes_dec")] public int NotesDec { get; set; } - - [Column("___notes_diffs_normal")] public int NotesDiffsNormal { get; set; } - - [Column("___notes_diffs_reply")] public int NotesDiffsReply { get; set; } - - [Column("___notes_diffs_renote")] public int NotesDiffsRenote { get; set; } - - [Column("___users_total")] public int UsersTotal { get; set; } - - [Column("___users_inc")] public short UsersInc { get; set; } - - [Column("___users_dec")] public short UsersDec { get; set; } - - [Column("___following_total")] public int FollowingTotal { get; set; } - - [Column("___following_inc")] public short FollowingInc { get; set; } - - [Column("___following_dec")] public short FollowingDec { get; set; } - - [Column("___followers_total")] public int FollowersTotal { get; set; } - - [Column("___followers_inc")] public short FollowersInc { get; set; } - - [Column("___followers_dec")] public short FollowersDec { get; set; } - - [Column("___drive_totalFiles")] public int DriveTotalFiles { get; set; } - - [Column("___drive_incFiles")] public int DriveIncFiles { get; set; } - - [Column("___drive_incUsage")] public int DriveIncUsage { get; set; } - - [Column("___drive_decFiles")] public int DriveDecFiles { get; set; } - - [Column("___drive_decUsage")] public int DriveDecUsage { get; set; } - - [Column("___notes_diffs_withFile")] public int NotesDiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayNetwork.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayNetwork.cs deleted file mode 100644 index 8af2ad9e..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayNetwork.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__network")] -[Index("Date", Name = "IDX_8bfa548c2b31f9e07db113773e", IsUnique = true)] -[Index("Date", Name = "UQ_8bfa548c2b31f9e07db113773ee", IsUnique = true)] -public class ChartDayNetwork { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___incomingRequests")] public int IncomingRequests { get; set; } - - [Column("___outgoingRequests")] public int OutgoingRequests { get; set; } - - [Column("___totalTime")] public int TotalTime { get; set; } - - [Column("___incomingBytes")] public int IncomingBytes { get; set; } - - [Column("___outgoingBytes")] public int OutgoingBytes { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayNote.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayNote.cs deleted file mode 100644 index 3a015e28..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayNote.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__notes")] -[Index("Date", Name = "IDX_1a527b423ad0858a1af5a056d4", IsUnique = true)] -[Index("Date", Name = "UQ_1a527b423ad0858a1af5a056d43", IsUnique = true)] -public class ChartDayNote { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_total")] public int LocalTotal { get; set; } - - [Column("___local_inc")] public int LocalInc { get; set; } - - [Column("___local_dec")] public int LocalDec { get; set; } - - [Column("___local_diffs_normal")] public int LocalDiffsNormal { get; set; } - - [Column("___local_diffs_reply")] public int LocalDiffsReply { get; set; } - - [Column("___local_diffs_renote")] public int LocalDiffsRenote { get; set; } - - [Column("___remote_total")] public int RemoteTotal { get; set; } - - [Column("___remote_inc")] public int RemoteInc { get; set; } - - [Column("___remote_dec")] public int RemoteDec { get; set; } - - [Column("___remote_diffs_normal")] public int RemoteDiffsNormal { get; set; } - - [Column("___remote_diffs_reply")] public int RemoteDiffsReply { get; set; } - - [Column("___remote_diffs_renote")] public int RemoteDiffsRenote { get; set; } - - [Column("___local_diffs_withFile")] public int LocalDiffsWithFile { get; set; } - - [Column("___remote_diffs_withFile")] public int RemoteDiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserDrive.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserDrive.cs deleted file mode 100644 index 70919cf1..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserDrive.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__per_user_drive")] -[Index("Date", "Group", Name = "IDX_62aa5047b5aec92524f24c701d", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_62aa5047b5aec92524f24c701d7", IsUnique = true)] -public class ChartDayPerUserDrive { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___totalCount")] public int TotalCount { get; set; } - - [Column("___totalSize")] public int TotalSize { get; set; } - - [Column("___incCount")] public short IncCount { get; set; } - - [Column("___incSize")] public int IncSize { get; set; } - - [Column("___decCount")] public short DecCount { get; set; } - - [Column("___decSize")] public int DecSize { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserFollowing.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserFollowing.cs deleted file mode 100644 index 1e344bfa..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserFollowing.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__per_user_following")] -[Index("Date", "Group", Name = "IDX_e4849a3231f38281280ea4c0ee", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_e4849a3231f38281280ea4c0eee", IsUnique = true)] -public class ChartDayPerUserFollowing { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_followings_total")] public int LocalFollowingsTotal { get; set; } - - [Column("___local_followings_inc")] public short LocalFollowingsInc { get; set; } - - [Column("___local_followings_dec")] public short LocalFollowingsDec { get; set; } - - [Column("___local_followers_total")] public int LocalFollowersTotal { get; set; } - - [Column("___local_followers_inc")] public short LocalFollowersInc { get; set; } - - [Column("___local_followers_dec")] public short LocalFollowersDec { get; set; } - - [Column("___remote_followings_total")] public int RemoteFollowingsTotal { get; set; } - - [Column("___remote_followings_inc")] public short RemoteFollowingsInc { get; set; } - - [Column("___remote_followings_dec")] public short RemoteFollowingsDec { get; set; } - - [Column("___remote_followers_total")] public int RemoteFollowersTotal { get; set; } - - [Column("___remote_followers_inc")] public short RemoteFollowersInc { get; set; } - - [Column("___remote_followers_dec")] public short RemoteFollowersDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserNote.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserNote.cs deleted file mode 100644 index aaea08d6..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserNote.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__per_user_notes")] -[Index("Date", "Group", Name = "IDX_c5545d4b31cdc684034e33b81c", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_c5545d4b31cdc684034e33b81c3", IsUnique = true)] -public class ChartDayPerUserNote { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___total")] public int Total { get; set; } - - [Column("___inc")] public short Inc { get; set; } - - [Column("___dec")] public short Dec { get; set; } - - [Column("___diffs_normal")] public short DiffsNormal { get; set; } - - [Column("___diffs_reply")] public short DiffsReply { get; set; } - - [Column("___diffs_renote")] public short DiffsRenote { get; set; } - - [Column("___diffs_withFile")] public short DiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserReaction.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserReaction.cs deleted file mode 100644 index eabdaa5b..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayPerUserReaction.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__per_user_reaction")] -[Index("Date", "Group", Name = "IDX_d54b653660d808b118e36c184c", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_d54b653660d808b118e36c184c0", IsUnique = true)] -public class ChartDayPerUserReaction { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_count")] public short LocalCount { get; set; } - - [Column("___remote_count")] public short RemoteCount { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDayUser.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDayUser.cs deleted file mode 100644 index eb5bb640..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDayUser.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart_day__users")] -[Index("Date", Name = "IDX_cad6e07c20037f31cdba8a350c", IsUnique = true)] -[Index("Date", Name = "UQ_cad6e07c20037f31cdba8a350c3", IsUnique = true)] -public class ChartDayUser { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_total")] public int LocalTotal { get; set; } - - [Column("___local_inc")] public short LocalInc { get; set; } - - [Column("___local_dec")] public short LocalDec { get; set; } - - [Column("___remote_total")] public int RemoteTotal { get; set; } - - [Column("___remote_inc")] public short RemoteInc { get; set; } - - [Column("___remote_dec")] public short RemoteDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartDrive.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartDrive.cs deleted file mode 100644 index ceeb9de1..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartDrive.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__drive")] -[Index("Date", Name = "IDX_13565815f618a1ff53886c5b28", IsUnique = true)] -[Index("Date", Name = "UQ_13565815f618a1ff53886c5b28a", IsUnique = true)] -public class ChartDrive { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_incCount")] public int LocalIncCount { get; set; } - - [Column("___local_incSize")] public int LocalIncSize { get; set; } - - [Column("___local_decCount")] public int LocalDecCount { get; set; } - - [Column("___local_decSize")] public int LocalDecSize { get; set; } - - [Column("___remote_incCount")] public int RemoteIncCount { get; set; } - - [Column("___remote_incSize")] public int RemoteIncSize { get; set; } - - [Column("___remote_decCount")] public int RemoteDecCount { get; set; } - - [Column("___remote_decSize")] public int RemoteDecSize { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartFederation.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartFederation.cs deleted file mode 100644 index 49c86563..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartFederation.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__federation")] -[Index("Date", Name = "IDX_36cb699c49580d4e6c2e6159f9", IsUnique = true)] -[Index("Date", Name = "UQ_36cb699c49580d4e6c2e6159f97", IsUnique = true)] -public class ChartFederation { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("unique_temp___deliveredInstances", TypeName = "character varying[]")] - public List UniqueTempDeliveredInstances { get; set; } = null!; - - [Column("___deliveredInstances")] public short DeliveredInstances { get; set; } - - [Column("unique_temp___inboxInstances", TypeName = "character varying[]")] - public List UniqueTempInboxInstances { get; set; } = null!; - - [Column("___inboxInstances")] public short InboxInstances { get; set; } - - [Column("unique_temp___stalled", TypeName = "character varying[]")] - public List UniqueTempStalled { get; set; } = null!; - - [Column("___stalled")] public short Stalled { get; set; } - - [Column("___sub")] public short Sub { get; set; } - - [Column("___pub")] public short Pub { get; set; } - - [Column("___pubsub")] public short Pubsub { get; set; } - - [Column("___subActive")] public short SubActive { get; set; } - - [Column("___pubActive")] public short PubActive { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartHashtag.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartHashtag.cs deleted file mode 100644 index 85f4922e..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartHashtag.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__hashtag")] -[Index("Date", "Group", Name = "IDX_25a97c02003338124b2b75fdbc", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_25a97c02003338124b2b75fdbc8", IsUnique = true)] -public class ChartHashtag { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_users")] public int LocalUsers { get; set; } - - [Column("___remote_users")] public int RemoteUsers { get; set; } - - [Column("unique_temp___local_users", TypeName = "character varying[]")] - public List UniqueTempLocalUsers { get; set; } = null!; - - [Column("unique_temp___remote_users", TypeName = "character varying[]")] - public List UniqueTempRemoteUsers { get; set; } = null!; -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartInstance.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartInstance.cs deleted file mode 100644 index 73b4d6d2..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartInstance.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__instance")] -[Index("Date", "Group", Name = "IDX_39ee857ab2f23493037c6b6631", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_39ee857ab2f23493037c6b66311", IsUnique = true)] -public class ChartInstance { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___requests_failed")] public short RequestsFailed { get; set; } - - [Column("___requests_succeeded")] public short RequestsSucceeded { get; set; } - - [Column("___requests_received")] public short RequestsReceived { get; set; } - - [Column("___notes_total")] public int NotesTotal { get; set; } - - [Column("___notes_inc")] public int NotesInc { get; set; } - - [Column("___notes_dec")] public int NotesDec { get; set; } - - [Column("___notes_diffs_normal")] public int NotesDiffsNormal { get; set; } - - [Column("___notes_diffs_reply")] public int NotesDiffsReply { get; set; } - - [Column("___notes_diffs_renote")] public int NotesDiffsRenote { get; set; } - - [Column("___users_total")] public int UsersTotal { get; set; } - - [Column("___users_inc")] public short UsersInc { get; set; } - - [Column("___users_dec")] public short UsersDec { get; set; } - - [Column("___following_total")] public int FollowingTotal { get; set; } - - [Column("___following_inc")] public short FollowingInc { get; set; } - - [Column("___following_dec")] public short FollowingDec { get; set; } - - [Column("___followers_total")] public int FollowersTotal { get; set; } - - [Column("___followers_inc")] public short FollowersInc { get; set; } - - [Column("___followers_dec")] public short FollowersDec { get; set; } - - [Column("___drive_totalFiles")] public int DriveTotalFiles { get; set; } - - [Column("___drive_incFiles")] public int DriveIncFiles { get; set; } - - [Column("___drive_incUsage")] public int DriveIncUsage { get; set; } - - [Column("___drive_decFiles")] public int DriveDecFiles { get; set; } - - [Column("___drive_decUsage")] public int DriveDecUsage { get; set; } - - [Column("___notes_diffs_withFile")] public int NotesDiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartNetwork.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartNetwork.cs deleted file mode 100644 index 79ef2af7..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartNetwork.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__network")] -[Index("Date", Name = "IDX_a1efd3e0048a5f2793a47360dc", IsUnique = true)] -[Index("Date", Name = "UQ_a1efd3e0048a5f2793a47360dc6", IsUnique = true)] -public class ChartNetwork { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___incomingRequests")] public int IncomingRequests { get; set; } - - [Column("___outgoingRequests")] public int OutgoingRequests { get; set; } - - [Column("___totalTime")] public int TotalTime { get; set; } - - [Column("___incomingBytes")] public int IncomingBytes { get; set; } - - [Column("___outgoingBytes")] public int OutgoingBytes { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartNote.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartNote.cs deleted file mode 100644 index 47ef5dc9..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartNote.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__notes")] -[Index("Date", Name = "IDX_42eb716a37d381cdf566192b2b", IsUnique = true)] -[Index("Date", Name = "UQ_42eb716a37d381cdf566192b2be", IsUnique = true)] -public class ChartNote { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_total")] public int LocalTotal { get; set; } - - [Column("___local_inc")] public int LocalInc { get; set; } - - [Column("___local_dec")] public int LocalDec { get; set; } - - [Column("___local_diffs_normal")] public int LocalDiffsNormal { get; set; } - - [Column("___local_diffs_reply")] public int LocalDiffsReply { get; set; } - - [Column("___local_diffs_renote")] public int LocalDiffsRenote { get; set; } - - [Column("___remote_total")] public int RemoteTotal { get; set; } - - [Column("___remote_inc")] public int RemoteInc { get; set; } - - [Column("___remote_dec")] public int RemoteDec { get; set; } - - [Column("___remote_diffs_normal")] public int RemoteDiffsNormal { get; set; } - - [Column("___remote_diffs_reply")] public int RemoteDiffsReply { get; set; } - - [Column("___remote_diffs_renote")] public int RemoteDiffsRenote { get; set; } - - [Column("___local_diffs_withFile")] public int LocalDiffsWithFile { get; set; } - - [Column("___remote_diffs_withFile")] public int RemoteDiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserDrive.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserDrive.cs deleted file mode 100644 index 0a0d729c..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserDrive.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__per_user_drive")] -[Index("Date", "Group", Name = "IDX_30bf67687f483ace115c5ca642", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_30bf67687f483ace115c5ca6429", IsUnique = true)] -public class ChartPerUserDrive { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___totalCount")] public int TotalCount { get; set; } - - [Column("___totalSize")] public int TotalSize { get; set; } - - [Column("___incCount")] public short IncCount { get; set; } - - [Column("___incSize")] public int IncSize { get; set; } - - [Column("___decCount")] public short DecCount { get; set; } - - [Column("___decSize")] public int DecSize { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserFollowing.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserFollowing.cs deleted file mode 100644 index 9470f652..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserFollowing.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__per_user_following")] -[Index("Date", "Group", Name = "IDX_b77d4dd9562c3a899d9a286fcd", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_b77d4dd9562c3a899d9a286fcd7", IsUnique = true)] -public class ChartPerUserFollowing { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_followings_total")] public int LocalFollowingsTotal { get; set; } - - [Column("___local_followings_inc")] public short LocalFollowingsInc { get; set; } - - [Column("___local_followings_dec")] public short LocalFollowingsDec { get; set; } - - [Column("___local_followers_total")] public int LocalFollowersTotal { get; set; } - - [Column("___local_followers_inc")] public short LocalFollowersInc { get; set; } - - [Column("___local_followers_dec")] public short LocalFollowersDec { get; set; } - - [Column("___remote_followings_total")] public int RemoteFollowingsTotal { get; set; } - - [Column("___remote_followings_inc")] public short RemoteFollowingsInc { get; set; } - - [Column("___remote_followings_dec")] public short RemoteFollowingsDec { get; set; } - - [Column("___remote_followers_total")] public int RemoteFollowersTotal { get; set; } - - [Column("___remote_followers_inc")] public short RemoteFollowersInc { get; set; } - - [Column("___remote_followers_dec")] public short RemoteFollowersDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserNote.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserNote.cs deleted file mode 100644 index 5bf59f9c..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserNote.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__per_user_notes")] -[Index("Date", "Group", Name = "IDX_5048e9daccbbbc6d567bb142d3", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_5048e9daccbbbc6d567bb142d34", IsUnique = true)] -public class ChartPerUserNote { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___total")] public int Total { get; set; } - - [Column("___inc")] public short Inc { get; set; } - - [Column("___dec")] public short Dec { get; set; } - - [Column("___diffs_normal")] public short DiffsNormal { get; set; } - - [Column("___diffs_reply")] public short DiffsReply { get; set; } - - [Column("___diffs_renote")] public short DiffsRenote { get; set; } - - [Column("___diffs_withFile")] public short DiffsWithFile { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserReaction.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserReaction.cs deleted file mode 100644 index f404efa8..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartPerUserReaction.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__per_user_reaction")] -[Index("Date", "Group", Name = "IDX_229a41ad465f9205f1f5703291", IsUnique = true)] -[Index("Date", "Group", Name = "UQ_229a41ad465f9205f1f57032910", IsUnique = true)] -public class ChartPerUserReaction { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string Group { get; set; } = null!; - - [Column("___local_count")] public short LocalCount { get; set; } - - [Column("___remote_count")] public short RemoteCount { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartTest.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartTest.cs deleted file mode 100644 index ce0364ad..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartTest.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__test")] -[Index("Date", "Group", Name = "IDX_a319e5dbf47e8a17497623beae", IsUnique = true)] -public class ChartTest { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string? Group { get; set; } - - [Column("___foo_total")] public long FooTotal { get; set; } - - [Column("___foo_inc")] public long FooInc { get; set; } - - [Column("___foo_dec")] public long FooDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartTestGrouped.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartTestGrouped.cs deleted file mode 100644 index 3e0a89d3..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartTestGrouped.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__test_grouped")] -[Index("Date", "Group", Name = "IDX_b14489029e4b3aaf4bba5fb524", IsUnique = true)] -public class ChartTestGrouped { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string? Group { get; set; } - - [Column("___foo_total")] public long FooTotal { get; set; } - - [Column("___foo_inc")] public long FooInc { get; set; } - - [Column("___foo_dec")] public long FooDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartTestUnique.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartTestUnique.cs deleted file mode 100644 index e7f7b8fd..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartTestUnique.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__test_unique")] -[Index("Date", "Group", Name = "IDX_a0cd75442dd10d0643a17c4a49", IsUnique = true)] -public class ChartTestUnique { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("group")] [StringLength(128)] public string? Group { get; set; } - - [Column("___foo", TypeName = "character varying[]")] - public List Foo { get; set; } = null!; -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/ChartUser.cs b/Iceshrimp.Backend/Core/Database/Tables/ChartUser.cs deleted file mode 100644 index f6d5096b..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/ChartUser.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("__chart__users")] -[Index("Date", Name = "IDX_845254b3eaf708ae8a6cac3026", IsUnique = true)] -[Index("Date", Name = "UQ_845254b3eaf708ae8a6cac30265", IsUnique = true)] -public class ChartUser { - [Key] [Column("id")] public int Id { get; set; } - - [Column("date")] public int Date { get; set; } - - [Column("___local_total")] public int LocalTotal { get; set; } - - [Column("___local_inc")] public short LocalInc { get; set; } - - [Column("___local_dec")] public short LocalDec { get; set; } - - [Column("___remote_total")] public int RemoteTotal { get; set; } - - [Column("___remote_inc")] public short RemoteInc { get; set; } - - [Column("___remote_dec")] public short RemoteDec { get; set; } -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/LegacyMigrations.cs b/Iceshrimp.Backend/Core/Database/Tables/LegacyMigrations.cs deleted file mode 100644 index 2a4d784e..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/LegacyMigrations.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("migrations")] -public class LegacyMigrations { - [Key] [Column("id")] public int Id { get; set; } - - [Column("timestamp")] public long Timestamp { get; set; } - - [Column("name", TypeName = "character varying")] - public string Name { get; set; } = null!; -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/UserIp.cs b/Iceshrimp.Backend/Core/Database/Tables/UserIp.cs deleted file mode 100644 index b1f273ca..00000000 --- a/Iceshrimp.Backend/Core/Database/Tables/UserIp.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; -using Microsoft.EntityFrameworkCore; - -namespace Iceshrimp.Backend.Core.Database.Tables; - -[Table("user_ip")] -[Index("UserId", "Ip", Name = "IDX_361b500e06721013c124b7b6c5", IsUnique = true)] -[Index("UserId", Name = "IDX_7f7f1c66f48e9a8e18a33bc515")] -public class UserIp { - [Key] [Column("id")] public int Id { get; set; } - - [Column("createdAt")] public DateTime CreatedAt { get; set; } - - [Column("userId")] [StringLength(32)] public string UserId { get; set; } = null!; - - [Column("ip")] [StringLength(128)] public string Ip { get; set; } = null!; -} \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Database/Tables/UserProfile.cs b/Iceshrimp.Backend/Core/Database/Tables/UserProfile.cs index 5190ced1..f23a906e 100644 --- a/Iceshrimp.Backend/Core/Database/Tables/UserProfile.cs +++ b/Iceshrimp.Backend/Core/Database/Tables/UserProfile.cs @@ -49,7 +49,7 @@ public class UserProfile { public UserProfileFFVisibility FFVisibility { get; set; } [Column("mutingNotificationTypes")] - public List MutingNotificationTypes { get; set; } = null!; + public List MutingNotificationTypes { get; set; } = null!; /// /// The email address of the User. diff --git a/Iceshrimp.Backend/migrate.sql b/Iceshrimp.Backend/migrate.sql new file mode 100644 index 00000000..6dbce62d --- /dev/null +++ b/Iceshrimp.Backend/migrate.sql @@ -0,0 +1,77 @@ +BEGIN TRANSACTION; + +DROP FUNCTION note_replies(start_id character varying, max_depth integer, max_breadth integer); + +DROP TABLE __chart__active_users; +DROP TABLE __chart__ap_request; +DROP TABLE __chart__drive; +DROP TABLE __chart__federation; +DROP TABLE __chart__hashtag; +DROP TABLE __chart__instance; +DROP TABLE __chart__network; +DROP TABLE __chart__notes; +DROP TABLE __chart__per_user_drive; +DROP TABLE __chart__per_user_following; +DROP TABLE __chart__per_user_notes; +DROP TABLE __chart__per_user_reaction; +DROP TABLE __chart__test; +DROP TABLE __chart__test_grouped; +DROP TABLE __chart__test_unique; +DROP TABLE __chart__users; +DROP TABLE __chart_day__active_users; +DROP TABLE __chart_day__ap_request; +DROP TABLE __chart_day__drive; +DROP TABLE __chart_day__federation; +DROP TABLE __chart_day__hashtag; +DROP TABLE __chart_day__instance; +DROP TABLE __chart_day__network; +DROP TABLE __chart_day__notes; +DROP TABLE __chart_day__per_user_drive; +DROP TABLE __chart_day__per_user_following; +DROP TABLE __chart_day__per_user_notes; +DROP TABLE __chart_day__per_user_reaction; +DROP TABLE __chart_day__users; +DROP TABLE migrations; +DROP TABLE user_ip; + +ALTER TABLE user_publickey DROP CONSTRAINT "PK_10c146e4b39b443ede016f6736d"; +ALTER TABLE "user" DROP CONSTRAINT "REL_58f5c71eaab331645112cf8cfa"; +ALTER TABLE "user" DROP CONSTRAINT "REL_afc64b53f8db3707ceb34eb28e"; +ALTER TABLE "user" DROP CONSTRAINT "UQ_a854e557b1b14814750c7c7b0c9"; +ALTER TABLE user_profile DROP CONSTRAINT "UQ_6dc44f1ceb65b1e72bacef2ca27"; + +CREATE INDEX "IX_abuse_user_report_assigneeId" ON abuse_user_report USING btree ("assigneeId"); +CREATE INDEX "IX_access_token_appId" ON access_token USING btree ("appId"); +CREATE INDEX "IX_antenna_userGroupJoiningId" ON antenna USING btree ("userGroupJoiningId"); +CREATE INDEX "IX_antenna_userListId" ON antenna USING btree ("userListId"); +CREATE INDEX "IX_auth_session_appId" ON auth_session USING btree ("appId"); +CREATE INDEX "IX_auth_session_userId" ON auth_session USING btree ("userId"); +CREATE INDEX "IX_channel_bannerId" ON channel USING btree ("bannerId"); +CREATE INDEX "IX_channel_note_pining_noteId" ON channel_note_pining USING btree ("noteId"); +CREATE INDEX "IX_gallery_like_postId" ON gallery_like USING btree ("postId"); +CREATE INDEX "IX_messaging_message_fileId" ON messaging_message USING btree ("fileId"); +CREATE INDEX "IX_note_favorite_noteId" ON note_favorite USING btree ("noteId"); +CREATE INDEX "IX_notification_followRequestId" ON notification USING btree ("followRequestId"); +CREATE INDEX "IX_notification_noteId" ON notification USING btree ("noteId"); +CREATE INDEX "IX_notification_userGroupInvitationId" ON notification USING btree ("userGroupInvitationId"); +CREATE INDEX "IX_oauth_token_appId" ON oauth_token USING btree ("appId"); +CREATE INDEX "IX_oauth_token_userId" ON oauth_token USING btree ("userId"); +CREATE INDEX "IX_page_eyeCatchingImageId" ON page USING btree ("eyeCatchingImageId"); +CREATE INDEX "IX_page_like_pageId" ON page_like USING btree ("pageId"); +CREATE INDEX "IX_promo_read_noteId" ON promo_read USING btree ("noteId"); +CREATE INDEX "IX_session_userId" ON "session" USING btree ("userId"); +CREATE INDEX "IX_user_note_pining_noteId" ON user_note_pining USING btree ("noteId"); + +CREATE UNIQUE INDEX "REL_58f5c71eaab331645112cf8cfa" ON "user" USING btree ("avatarId"); +CREATE UNIQUE INDEX "REL_afc64b53f8db3707ceb34eb28e" ON "user" USING btree ("bannerId"); +CREATE UNIQUE INDEX "UQ_a854e557b1b14814750c7c7b0c9" ON "user" USING btree (token); +CREATE UNIQUE INDEX "UQ_6dc44f1ceb65b1e72bacef2ca27" ON user_profile USING btree ("pinnedPageId"); + +CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( + "MigrationId" character varying(150) NOT NULL, + "ProductVersion" character varying(32) NOT NULL, + CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") +); +INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") VALUES ('20240107155500_Initial', '8.0.0'); + +COMMIT;