using System;
using Microsoft.EntityFrameworkCore.Infrastructure;
using System.Collections.Generic;
using Iceshrimp.Backend.Core.Database.Tables;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace Iceshrimp.Backend.Core.Database.Migrations
{
    /// <inheritdoc />
    [DbContext(typeof(DatabaseContext))]
    [Migration("20240107171910_Initial")]
    public partial class Initial : Migration
    {
        /// <inheritdoc />
        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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Announcement."),
                    text = table.Column<string>(type: "character varying(8192)", maxLength: 8192, nullable: false),
                    title = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    imageUrl = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true, comment: "The updated date of the Announcement."),
                    showPopup = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    isGoodNews = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    host = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    originalUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
                    uri = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    type = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    aliases = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    category = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    publicUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false, defaultValueSql: "''::character varying"),
                    license = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    width = table.Column<int>(type: "integer", nullable: true, comment: "Image width"),
                    height = table.Column<int>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    mentionedUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    mentionedUsersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    mentionedLocalUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    mentionedLocalUsersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    mentionedRemoteUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    mentionedRemoteUsersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    attachedUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    attachedUsersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    attachedLocalUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    attachedLocalUsersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    attachedRemoteUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false),
                    attachedRemoteUsersCount = table.Column<int>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    caughtAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The caught date of the Instance."),
                    host = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The host of the Instance."),
                    usersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of the users of the Instance."),
                    notesCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of the notes of the Instance."),
                    followingCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    followersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    latestRequestSentAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    latestStatus = table.Column<int>(type: "integer", nullable: true),
                    latestRequestReceivedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    lastCommunicatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    isNotResponding = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    softwareName = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true, comment: "The software of the Instance."),
                    softwareVersion = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    openRegistrations = table.Column<bool>(type: "boolean", nullable: true),
                    name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
                    maintainerName = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    maintainerEmail = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    infoUpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    isSuspended = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    iconUrl = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
                    themeColor = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    faviconUrl = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    description = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    maintainerName = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    maintainerEmail = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    disableRegistration = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    disableLocalTimeline = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    disableGlobalTimeline = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    langs = table.Column<List<string>>(type: "character varying(64)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    hiddenTags = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    blockedHosts = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    mascotImageUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'/static-assets/badges/info.png'::character varying"),
                    bannerUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    errorImageUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'/static-assets/badges/error.png'::character varying"),
                    iconUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    cacheRemoteFiles = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    enableRecaptcha = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    recaptchaSiteKey = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    recaptchaSecretKey = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    localDriveCapacityMb = table.Column<int>(type: "integer", nullable: false, defaultValue: 1024, comment: "Drive capacity of a local user (MB)"),
                    remoteDriveCapacityMb = table.Column<int>(type: "integer", nullable: false, defaultValue: 32, comment: "Drive capacity of a remote user (MB)"),
                    summalyProxy = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    enableEmail = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    email = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    smtpSecure = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    smtpHost = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    smtpPort = table.Column<int>(type: "integer", nullable: true),
                    smtpUser = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    smtpPass = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    swPublicKey = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    swPrivateKey = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    enableGithubIntegration = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    githubClientId = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    githubClientSecret = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    enableDiscordIntegration = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    discordClientId = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    discordClientSecret = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    pinnedUsers = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    ToSUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    repositoryUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false, defaultValueSql: "'https://iceshrimp.dev/iceshrimp/iceshrimp'::character varying"),
                    feedbackUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, defaultValueSql: "'https://iceshrimp.dev/iceshrimp/iceshrimp/issues/new'::character varying"),
                    useObjectStorage = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    objectStorageBucket = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStoragePrefix = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStorageBaseUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStorageEndpoint = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStorageRegion = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStorageAccessKey = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStorageSecretKey = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    objectStoragePort = table.Column<int>(type: "integer", nullable: true),
                    objectStorageUseSSL = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    objectStorageUseProxy = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    enableHcaptcha = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    hcaptchaSiteKey = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    hcaptchaSecretKey = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: true),
                    objectStorageSetPublicRead = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    pinnedPages = table.Column<List<string>>(type: "character varying(512)[]", nullable: false, defaultValueSql: "'{/featured,/channels,/explore,/pages,/about-iceshrimp}'::character varying[]"),
                    backgroundImageUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    logoImageUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    pinnedClipId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    objectStorageS3ForcePathStyle = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    allowedHosts = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    secureMode = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    privateMode = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    deeplAuthKey = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    deeplIsPro = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    emailRequiredForSignup = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    themeColor = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    defaultLightTheme = table.Column<string>(type: "character varying(8192)", maxLength: 8192, nullable: true),
                    defaultDarkTheme = table.Column<string>(type: "character varying(8192)", maxLength: 8192, nullable: true),
                    enableIpLogging = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    enableActiveEmailValidation = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    customMOTD = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    customSplashIcons = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    disableRecommendedTimeline = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    recommendedInstances = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    defaultReaction = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false, defaultValueSql: "'⭐'::character varying"),
                    libreTranslateApiUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    libreTranslateApiKey = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    silencedHosts = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    experimentalFeatures = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"),
                    enableServerMachineStats = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    enableIdenticonGeneration = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    donationLink = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    autofollowedAccount = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth application"),
                    clientId = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The client id of the OAuth application"),
                    clientSecret = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The client secret of the OAuth application"),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the OAuth application"),
                    website = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true, comment: "The website of the OAuth application"),
                    scopes = table.Column<List<string>>(type: "character varying(64)[]", nullable: false, comment: "The scopes requested by the OAuth application"),
                    redirectUris = table.Column<List<string>>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    code = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    inbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
                    status = table.Column<Relay.RelayStatus>(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<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    createdAt = table.Column<DateTime>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    code = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    username = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    email = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    password = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the AbuseUserReport."),
                    targetUserId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    reporterId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    assigneeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    resolved = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    comment = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: false),
                    targetUserHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    reporterHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    forwarded = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the AccessToken."),
                    token = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    hash = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    appId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    lastUsedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    session = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    description = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    iconUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    permission = table.Column<List<string>>(type: "character varying(64)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    fetched = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    announcementId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Antenna."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Antenna."),
                    src = table.Column<Antenna.AntennaSource>(type: "antenna_src_enum", nullable: false),
                    userListId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    keywords = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    withFile = table.Column<bool>(type: "boolean", nullable: false),
                    expression = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: true),
                    notify = table.Column<bool>(type: "boolean", nullable: false),
                    caseSensitive = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    withReplies = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    userGroupJoiningId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    users = table.Column<List<string>>(type: "character varying(1024)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    excludeKeywords = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    instances = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the App."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."),
                    secret = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The secret key of the App."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the App."),
                    description = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The description of the App."),
                    permission = table.Column<List<string>>(type: "character varying(64)[]", nullable: false, comment: "The permission of the App."),
                    callbackUrl = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    challenge = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "Hex-encoded sha256 hash of the challenge."),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The date challenge was created for expiry purposes."),
                    registrationChallenge = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the AuthSession."),
                    token = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    appId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Blocking."),
                    blockeeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The blockee user ID."),
                    blockerId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Channel."),
                    lastNotedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Channel."),
                    description = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: true, comment: "The description of the Channel."),
                    bannerId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of banner Channel."),
                    notesCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of notes."),
                    usersCount = table.Column<int>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the ChannelFollowing."),
                    followeeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee channel ID."),
                    followerId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the ChannelNotePining."),
                    channelId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Clip."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Clip."),
                    isPublic = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    description = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The note ID."),
                    clipId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the DriveFile."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."),
                    userHost = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The MD5 hash of the DriveFile."),
                    name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false, comment: "The file name of the DriveFile."),
                    type = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The content type (MIME) of the DriveFile."),
                    size = table.Column<int>(type: "integer", nullable: false, comment: "The file size (bytes) of the DriveFile."),
                    comment = table.Column<string>(type: "character varying(8192)", maxLength: 8192, nullable: true, comment: "The comment of the DriveFile."),
                    properties = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The any properties of the DriveFile. For example, it includes image width/height."),
                    storedInternal = table.Column<bool>(type: "boolean", nullable: false),
                    url = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false, comment: "The URL of the DriveFile."),
                    thumbnailUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the thumbnail of the DriveFile."),
                    webpublicUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the webpublic of the DriveFile."),
                    accessKey = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    thumbnailAccessKey = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    webpublicAccessKey = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    uri = table.Column<string>(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<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    folderId = table.Column<string>(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<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the DriveFile is NSFW."),
                    isLink = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the DriveFile is direct link to remote server."),
                    blurhash = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The BlurHash string."),
                    webpublicType = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    requestHeaders = table.Column<string>(type: "jsonb", nullable: true, defaultValueSql: "'{}'::jsonb"),
                    requestIp = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the User."),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true, comment: "The updated date of the User."),
                    lastFetchedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    username = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The username of the User."),
                    usernameLower = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The username (lowercased) of the User."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The name of the User."),
                    followersCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of followers."),
                    followingCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of following."),
                    notesCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0, comment: "The count of notes."),
                    avatarId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of avatar DriveFile."),
                    bannerId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of banner DriveFile."),
                    tags = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    isSuspended = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is suspended."),
                    isSilenced = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is silenced."),
                    isLocked = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is locked."),
                    isBot = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a bot."),
                    isCat = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a cat."),
                    isAdmin = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is the admin."),
                    isModerator = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is a moderator."),
                    emojis = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    host = table.Column<string>(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<string>(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<string>(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<string>(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<string>(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<string>(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<bool>(type: "boolean", nullable: false, defaultValue: true, comment: "Whether the User is explorable."),
                    followersUri = table.Column<string>(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<DateTime>(type: "timestamp with time zone", nullable: true),
                    hideOnlineStatus = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    isDeleted = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the User is deleted."),
                    driveCapacityOverrideMb = table.Column<int>(type: "integer", nullable: true, comment: "Overrides user drive capacity limit"),
                    movedToUri = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URI of the new account of the User"),
                    alsoKnownAs = table.Column<string>(type: "text", nullable: true, comment: "URIs the user is known as too"),
                    speakAsCat = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true, comment: "Whether to speak as a cat if isCat."),
                    avatarUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the avatar DriveFile"),
                    avatarBlurhash = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The blurhash of the avatar DriveFile"),
                    bannerUrl = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "The URL of the banner DriveFile"),
                    bannerBlurhash = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the DriveFolder."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the DriveFolder."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The owner ID."),
                    parentId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the FollowRequest."),
                    followeeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee user ID."),
                    followerId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The follower user ID."),
                    requestId = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "id of Follow Activity."),
                    followerHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followerInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followerSharedInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeSharedInbox = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Following."),
                    followeeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The followee user ID."),
                    followerId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The follower user ID."),
                    followerHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followerInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followerSharedInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeInbox = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    followeeSharedInbox = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the GalleryPost."),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The updated date of the GalleryPost."),
                    title = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    description = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: true),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."),
                    fileIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    isSensitive = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the post is sensitive."),
                    likedCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    tags = table.Column<List<string>>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    bio = table.Column<string>(type: "text", nullable: true),
                    fields = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the ModerationLog."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    type = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    info = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Muting."),
                    muteeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The mutee user ID."),
                    muterId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The muter user ID."),
                    expiresAt = table.Column<DateTime>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Note."),
                    replyId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of reply target."),
                    renoteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of renote target."),
                    text = table.Column<string>(type: "text", nullable: true),
                    name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    cw = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."),
                    visibility = table.Column<Note.NoteVisibility>(type: "note_visibility_enum", nullable: false),
                    localOnly = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    renoteCount = table.Column<short>(type: "smallint", nullable: false, defaultValue: (short)0),
                    repliesCount = table.Column<short>(type: "smallint", nullable: false, defaultValue: (short)0),
                    reactions = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"),
                    uri = table.Column<string>(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<int>(type: "integer", nullable: false, defaultValue: 0),
                    fileIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    attachedFileTypes = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    visibleUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    mentions = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    mentionedRemoteUsers = table.Column<string>(type: "text", nullable: false, defaultValueSql: "'[]'::text"),
                    emojis = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    tags = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    hasPoll = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    userHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    replyUserId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "[Denormalized]"),
                    replyUserHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    renoteUserId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "[Denormalized]"),
                    renoteUserHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    url = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of source channel."),
                    threadId = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    updatedAt = table.Column<DateTime>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    threadId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth token"),
                    appId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    code = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The auth code for the OAuth token"),
                    token = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The OAuth token"),
                    active = table.Column<bool>(type: "boolean", nullable: false, comment: "Whether or not the token has been activated"),
                    scopes = table.Column<List<string>>(type: "character varying(64)[]", nullable: false, comment: "The scopes requested by the OAuth token"),
                    redirectUri = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Page."),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The updated date of the Page."),
                    title = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    visibility = table.Column<Page.PageVisibility>(type: "page_visibility_enum", nullable: false),
                    summary = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    alignCenter = table.Column<bool>(type: "boolean", nullable: false),
                    font = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of author."),
                    eyeCatchingImageId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    content = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    variables = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    visibleUserIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    likedCount = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
                    hideTitleWhenPinned = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    script = table.Column<string>(type: "character varying(16384)", maxLength: 16384, nullable: false, defaultValueSql: "''::character varying"),
                    isPublic = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    token = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    userId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the RegistryItem."),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The updated date of the RegistryItem."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."),
                    key = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false, comment: "The key of the RegistryItem."),
                    scope = table.Column<List<string>>(type: "character varying(1024)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    domain = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    value = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Muting."),
                    muteeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The mutee user ID."),
                    muterId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the OAuth token"),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    token = table.Column<string>(type: "character varying(64)", maxLength: 64, nullable: false, comment: "The authorization token"),
                    active = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Signin."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    ip = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    headers = table.Column<string>(type: "jsonb", nullable: false),
                    success = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    endpoint = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
                    auth = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    publickey = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false),
                    sendReadMessage = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroup."),
                    name = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of owner."),
                    isPrivate = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    publicKey = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: false),
                    privateKey = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserList."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the UserList."),
                    hideFromHomeTl = table.Column<bool>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    keyId = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: false),
                    keyPem = table.Column<string>(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<string>(type: "character varying", nullable: false, comment: "Variable-length id given to navigator.credentials.get()"),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    publicKey = table.Column<string>(type: "character varying", nullable: false, comment: "Variable-length public key used to verify attestations (hex-encoded)."),
                    lastUsed = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The date of the last time the UserSecurityKey was successfully validated."),
                    name = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Antenna."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The owner ID."),
                    name = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: false, comment: "The name of the Antenna."),
                    on = table.Column<List<string>>(type: "character varying(128)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    url = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
                    secret = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
                    active = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    latestSentAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    latestStatus = table.Column<int>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    postId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    updatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    content = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of note."),
                    text = table.Column<string>(type: "text", nullable: true),
                    cw = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true),
                    fileIds = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    updatedAt = table.Column<DateTime>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteFavorite."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteReaction."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    reaction = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteUserId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]"),
                    isSpecified = table.Column<bool>(type: "boolean", nullable: false),
                    isMentioned = table.Column<bool>(type: "boolean", nullable: false),
                    noteChannelId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the NoteWatching."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The watcher ID."),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The target Note ID."),
                    noteUserId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    expiresAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
                    multiple = table.Column<bool>(type: "boolean", nullable: false),
                    choices = table.Column<List<string>>(type: "character varying(256)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    votes = table.Column<List<int>>(type: "integer[]", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "[Denormalized]"),
                    userHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    noteVisibility = table.Column<LegacyModels.PollNoteVisibility>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the PollVote."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    choice = table.Column<int>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    expiresAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the PromoRead."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserNotePinings."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    noteId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    pageId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    location = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The location of the User."),
                    birthday = table.Column<string>(type: "character(10)", fixedLength: true, maxLength: 10, nullable: true, comment: "The birthday (YYYY-MM-DD) of the User."),
                    description = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: true, comment: "The description (bio) of the User."),
                    fields = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    url = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "Remote URL of the user."),
                    ffVisibility = table.Column<UserProfile.UserProfileFFVisibility>(type: "user_profile_ffvisibility_enum", nullable: false, defaultValue: UserProfile.UserProfileFFVisibility.Public),
                    mutingNotificationTypes = table.Column<List<LegacyModels.MutingNotificationType>>(type: "user_profile_mutingnotificationtypes_enum[]", nullable: false, defaultValueSql: "'{}'::public.user_profile_mutingnotificationtypes_enum[]"),
                    email = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true, comment: "The email address of the User."),
                    emailVerifyCode = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    emailVerified = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    twoFactorTempSecret = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    twoFactorSecret = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    twoFactorEnabled = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    password = table.Column<string>(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<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The client-specific data of the User."),
                    autoAcceptFollowed = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    alwaysMarkNsfw = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    carefulBot = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    userHost = table.Column<string>(type: "character varying(512)", maxLength: 512, nullable: true, comment: "[Denormalized]"),
                    securityKeysAvailable = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    usePasswordLessLogin = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    pinnedPageId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    room = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb", comment: "The room data of the User."),
                    integrations = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'{}'::jsonb"),
                    injectFeaturedNote = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    enableWordMute = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    mutedWords = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb"),
                    noCrawle = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether reject index by crawler."),
                    receiveAnnouncementEmail = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    emailNotificationTypes = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[\"follow\", \"receiveFollowRequest\", \"groupInvited\"]'::jsonb"),
                    lang = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    mutedInstances = table.Column<string>(type: "jsonb", nullable: false, defaultValueSql: "'[]'::jsonb", comment: "List of instances muted by the user."),
                    publicReactions = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    moderationNote = table.Column<string>(type: "character varying(8192)", maxLength: 8192, nullable: false, defaultValueSql: "''::character varying"),
                    preventAiLearning = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
                    mentions = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the MessagingMessage."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The sender user ID."),
                    recipientId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The recipient user ID."),
                    text = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
                    isRead = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
                    fileId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    groupId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The recipient group ID."),
                    reads = table.Column<List<string>>(type: "character varying(32)[]", nullable: false, defaultValueSql: "'{}'::character varying[]"),
                    uri = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroupInvitation."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."),
                    userGroupId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    userGroupId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserGroupJoining."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."),
                    userGroupId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the UserListJoining."),
                    userId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The user ID."),
                    userListId = table.Column<string>(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<string>(type: "character varying(32)", maxLength: 32, nullable: false),
                    createdAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, comment: "The created date of the Notification."),
                    notifieeId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: false, comment: "The ID of recipient user of the Notification."),
                    notifierId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true, comment: "The ID of sender user of the Notification."),
                    isRead = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false, comment: "Whether the notification was read."),
                    type = table.Column<Core.Database.Tables.Notification.NotificationType>(type: "notification_type_enum", nullable: false, comment: "The type of the Notification."),
                    noteId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    reaction = table.Column<string>(type: "character varying(128)", maxLength: 128, nullable: true),
                    choice = table.Column<int>(type: "integer", nullable: true),
                    followRequestId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    userGroupInvitationId = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
                    customBody = table.Column<string>(type: "character varying(2048)", maxLength: 2048, nullable: true),
                    customHeader = table.Column<string>(type: "character varying(256)", maxLength: 256, nullable: true),
                    customIcon = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
                    appAccessTokenId = table.Column<string>(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);
        }

        /// <inheritdoc />
        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");
        }
    }
}
