Move migrations to database

This commit is contained in:
Rory&
2026-06-11 23:18:02 +02:00
parent 0b5d2a576d
commit 83e60464ad
77 changed files with 842 additions and 731 deletions
+3 -3
View File
@@ -56,13 +56,13 @@ export const DataSourceOptions = isHeadlessProcess
type: DatabaseType,
charset: "utf8mb4",
url: process.env.DATABASE,
entities: [path.join(__dirname, "..", "entities", "*.js")],
entities: [path.join(__dirname, "entities", "*.js")],
synchronize: !!process.env.DB_SYNC,
logging: !!process.env.DB_LOGGING,
bigNumberStrings: false,
supportBigNumbers: true,
name: "default",
migrations: applyMigrations ? [path.join(__dirname, "..", "migration", DatabaseType, "*.js")] : [],
migrations: applyMigrations ? [path.join(__dirname, "migration", DatabaseType, "*.js")] : [],
});
// Gets the existing database connection
@@ -108,7 +108,7 @@ export async function initDatabase(): Promise<DataSource> {
if (!(await dbExists())) {
console.log("[Database] This appears to be a fresh database. Running initial DDL.");
const qr = dbConnection.createQueryRunner();
const initialPath = path.join(__dirname, "..", "migration", DatabaseType + "-initial.js");
const initialPath = path.join(__dirname, "migration", DatabaseType + "-initial.js");
if (fs.existsSync(initialPath)) {
console.log("[Database] Found initial migration file, running it.");
await new (require(`../migration/${DatabaseType}-initial`).initial0)().up(qr);
+838
View File
@@ -0,0 +1,838 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2025 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { MigrationInterface, QueryRunner } from "typeorm";
export class initial0 implements MigrationInterface {
name = "initial0";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE TABLE public.applications (
id character varying NOT NULL,
name character varying NOT NULL,
icon character varying,
description character varying,
summary character varying,
type text,
hook boolean NOT NULL,
bot_public boolean NOT NULL,
bot_require_code_grant boolean NOT NULL,
verify_key character varying NOT NULL,
flags integer NOT NULL,
redirect_uris text,
rpc_application_state integer,
store_application_state integer,
verification_state integer,
interactions_endpoint_url character varying,
integration_public boolean,
integration_require_code_grant boolean,
discoverability_state integer,
discovery_eligibility_flags integer,
tags text,
cover_image character varying,
install_params text,
terms_of_service_url character varying,
privacy_policy_url character varying,
owner_id character varying,
bot_user_id character varying,
team_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.attachments (
id character varying NOT NULL,
filename character varying NOT NULL,
size integer NOT NULL,
url character varying NOT NULL,
proxy_url character varying NOT NULL,
height integer,
width integer,
content_type character varying,
message_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.audit_logs (
id character varying NOT NULL,
user_id character varying,
action_type integer NOT NULL,
options text,
changes text NOT NULL,
reason character varying,
target_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.backup_codes (
id character varying NOT NULL,
code character varying NOT NULL,
consumed boolean NOT NULL,
expired boolean NOT NULL,
user_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.bans (
id character varying NOT NULL,
user_id character varying,
guild_id character varying,
executor_id character varying,
ip character varying NOT NULL,
reason character varying
);`);
await queryRunner.query(`CREATE TABLE public.categories (
id integer NOT NULL,
name character varying,
localizations text NOT NULL,
is_primary boolean
);`);
await queryRunner.query(`CREATE TABLE public.channels (
id character varying NOT NULL,
created_at timestamp without time zone NOT NULL,
name character varying,
icon text,
type integer NOT NULL,
last_message_id character varying,
guild_id character varying,
parent_id character varying,
owner_id character varying,
last_pin_timestamp integer,
default_auto_archive_duration integer,
permission_overwrites text,
video_quality_mode integer,
bitrate integer,
user_limit integer,
nsfw boolean NOT NULL,
rate_limit_per_user integer,
topic character varying,
retention_policy_id character varying,
flags integer NOT NULL,
default_thread_rate_limit_per_user integer NOT NULL,
position integer NOT NULL DEFAULT 0
);`);
await queryRunner.query(`CREATE TABLE public.client_release (
id character varying NOT NULL,
name character varying NOT NULL,
pub_date timestamp without time zone NOT NULL,
url character varying NOT NULL,
platform character varying NOT NULL,
enabled boolean NOT NULL,
notes character varying
);`);
await queryRunner.query(`CREATE TABLE public.config (
key character varying NOT NULL,
value text
);`);
await queryRunner.query(`CREATE TABLE public.connected_accounts (
id character varying NOT NULL,
external_id character varying NOT NULL,
user_id character varying,
friend_sync boolean NOT NULL,
name character varying NOT NULL,
revoked boolean NOT NULL,
show_activity integer NOT NULL,
type character varying NOT NULL,
verified boolean NOT NULL,
visibility integer NOT NULL,
integrations text NOT NULL,
metadata text,
metadata_visibility integer NOT NULL,
two_way_link boolean NOT NULL,
token_data text
);`);
await queryRunner.query(`CREATE TABLE public.connection_config (
key character varying NOT NULL,
value text
);`);
await queryRunner.query(`CREATE TABLE public.embed_cache (
id character varying NOT NULL,
url character varying NOT NULL,
embed text NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.emojis (
id character varying NOT NULL,
animated boolean NOT NULL,
available boolean NOT NULL,
guild_id character varying NOT NULL,
user_id character varying,
managed boolean NOT NULL,
name character varying NOT NULL,
require_colons boolean NOT NULL,
roles text NOT NULL,
groups text
);`);
await queryRunner.query(`CREATE TABLE public.guilds (
id character varying NOT NULL,
afk_channel_id character varying,
afk_timeout integer,
banner character varying,
default_message_notifications integer,
description character varying,
discovery_splash character varying,
explicit_content_filter integer,
features text NOT NULL,
primary_category_id character varying,
icon character varying,
large boolean NOT NULL,
max_members integer,
max_presences integer,
max_video_channel_users integer,
member_count integer,
presence_count integer,
template_id character varying,
mfa_level integer,
name character varying NOT NULL,
owner_id character varying,
preferred_locale character varying,
premium_subscription_count integer,
premium_tier integer NOT NULL,
public_updates_channel_id character varying,
rules_channel_id character varying,
region character varying,
splash character varying,
system_channel_id character varying,
system_channel_flags integer,
unavailable boolean NOT NULL,
verification_level integer,
welcome_screen text NOT NULL,
widget_channel_id character varying,
widget_enabled boolean NOT NULL,
nsfw_level integer,
nsfw boolean NOT NULL,
parent character varying,
premium_progress_bar_enabled boolean
);`);
await queryRunner.query(`CREATE TABLE public.invites (
code character varying NOT NULL,
temporary boolean NOT NULL,
uses integer NOT NULL,
max_uses integer NOT NULL,
max_age integer NOT NULL,
created_at timestamp without time zone NOT NULL,
expires_at timestamp without time zone,
guild_id character varying,
channel_id character varying,
inviter_id character varying,
target_user_id character varying,
target_user_type integer,
vanity_url boolean,
flags integer NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.member_roles (
index integer NOT NULL,
role_id character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.members (
index integer NOT NULL,
id character varying NOT NULL,
guild_id character varying NOT NULL,
nick character varying,
joined_at timestamp without time zone NOT NULL,
premium_since bigint,
deaf boolean NOT NULL,
mute boolean NOT NULL,
pending boolean NOT NULL,
settings text NOT NULL,
last_message_id character varying,
joined_by character varying,
avatar character varying,
banner character varying,
bio character varying NOT NULL,
theme_colors text,
pronouns character varying,
communication_disabled_until timestamp without time zone
);`);
await queryRunner.query(`CREATE SEQUENCE public.members_index_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;`);
await queryRunner.query(`ALTER SEQUENCE public.members_index_seq OWNED BY public.members.index;`);
await queryRunner.query(`CREATE TABLE public.message_channel_mentions (
"messagesId" character varying NOT NULL,
"channelsId" character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.message_role_mentions (
"messagesId" character varying NOT NULL,
"rolesId" character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.message_stickers (
"messagesId" character varying NOT NULL,
"stickersId" character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.message_user_mentions (
"messagesId" character varying NOT NULL,
"usersId" character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.messages (
id character varying NOT NULL,
channel_id character varying,
guild_id character varying,
author_id character varying,
member_id character varying,
webhook_id character varying,
application_id character varying,
content character varying,
"timestamp" timestamp without time zone DEFAULT now() NOT NULL,
edited_timestamp timestamp without time zone,
tts boolean,
mention_everyone boolean,
embeds text NOT NULL,
reactions text NOT NULL,
nonce text,
type integer NOT NULL,
activity text,
message_reference text,
interaction text,
components text,
message_reference_id character varying,
pinned boolean,
flags integer
);`);
await queryRunner.query(`CREATE TABLE public.migrations (
id integer NOT NULL,
"timestamp" bigint NOT NULL,
name character varying NOT NULL
);`);
await queryRunner.query(`CREATE SEQUENCE public.migrations_id_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;`);
await queryRunner.query(`ALTER SEQUENCE public.migrations_id_seq OWNED BY public.migrations.id;`);
await queryRunner.query(`CREATE TABLE public.notes (
id character varying NOT NULL,
content character varying NOT NULL,
owner_id character varying,
target_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.rate_limits (
id character varying NOT NULL,
executor_id character varying NOT NULL,
hits integer NOT NULL,
blocked boolean NOT NULL,
expires_at timestamp without time zone NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.read_states (
id character varying NOT NULL,
channel_id character varying NOT NULL,
user_id character varying NOT NULL,
last_message_id character varying,
public_ack character varying,
notifications_cursor character varying,
last_pin_timestamp timestamp without time zone,
mention_count integer
);`);
await queryRunner.query(`CREATE TABLE public.recipients (
id character varying NOT NULL,
channel_id character varying NOT NULL,
user_id character varying NOT NULL,
closed boolean DEFAULT false NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.relationships (
id character varying NOT NULL,
from_id character varying NOT NULL,
to_id character varying NOT NULL,
nickname character varying,
type integer NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.roles (
id character varying NOT NULL,
guild_id character varying NOT NULL,
color integer NOT NULL,
hoist boolean NOT NULL,
managed boolean NOT NULL,
mentionable boolean NOT NULL,
name character varying NOT NULL,
permissions character varying NOT NULL,
"position" integer NOT NULL,
icon character varying,
unicode_emoji character varying,
tags text,
flags integer DEFAULT 0 NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.security_settings (
id character varying NOT NULL,
guild_id character varying,
channel_id character varying,
encryption_permission_mask integer NOT NULL,
allowed_algorithms text NOT NULL,
current_algorithm character varying NOT NULL,
used_since_message character varying
);`);
await queryRunner.query(`CREATE TABLE public.sessions (
id character varying NOT NULL,
user_id character varying,
session_id character varying NOT NULL,
activities text,
client_info text NOT NULL,
status character varying NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.sticker_packs (
id character varying NOT NULL,
name character varying NOT NULL,
description character varying,
banner_asset_id character varying,
cover_sticker_id character varying,
"coverStickerId" character varying
);`);
await queryRunner.query(`CREATE TABLE public.stickers (
id character varying NOT NULL,
name character varying NOT NULL,
description character varying,
available boolean,
tags character varying,
pack_id character varying,
guild_id character varying,
user_id character varying,
type integer NOT NULL,
format_type integer NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.team_members (
id character varying NOT NULL,
membership_state integer NOT NULL,
permissions text NOT NULL,
team_id character varying,
user_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.teams (
id character varying NOT NULL,
icon character varying,
name character varying NOT NULL,
owner_user_id character varying
);`);
await queryRunner.query(`CREATE TABLE public.templates (
id character varying NOT NULL,
code character varying NOT NULL,
name character varying NOT NULL,
description character varying,
usage_count integer,
creator_id character varying,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
source_guild_id character varying,
serialized_source_guild text NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.user_settings (
index integer NOT NULL,
afk_timeout integer,
allow_accessibility_detection boolean,
animate_emoji boolean,
animate_stickers integer,
contact_sync_enabled boolean,
convert_emoticons boolean,
custom_status text,
default_guilds_restricted boolean,
detect_platform_accounts boolean,
developer_mode boolean,
disable_games_tab boolean,
enable_tts_command boolean,
explicit_content_filter integer,
friend_source_flags text,
gateway_connected boolean,
gif_auto_play boolean,
guild_folders text,
guild_positions text,
inline_attachment_media boolean,
inline_embed_media boolean,
locale character varying,
message_display_compact boolean,
native_phone_integration_enabled boolean,
render_embeds boolean,
render_reactions boolean,
restricted_guilds text,
show_current_game boolean,
status character varying,
stream_notifications_enabled boolean,
theme character varying,
timezone_offset integer
);`);
await queryRunner.query(`CREATE SEQUENCE public.user_settings_index_seq
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;`);
await queryRunner.query(`ALTER SEQUENCE public.user_settings_index_seq OWNED BY public.user_settings.index;`);
await queryRunner.query(`CREATE TABLE public.users (
id character varying NOT NULL,
username character varying NOT NULL,
discriminator character varying NOT NULL,
avatar character varying,
accent_color integer,
banner character varying,
theme_colors text,
pronouns character varying,
phone character varying,
desktop boolean NOT NULL,
mobile boolean NOT NULL,
premium boolean NOT NULL,
premium_type integer NOT NULL,
bot boolean NOT NULL,
bio character varying NOT NULL,
system boolean NOT NULL,
nsfw_allowed boolean NOT NULL,
mfa_enabled boolean NOT NULL,
totp_secret character varying,
totp_last_ticket character varying,
created_at timestamp without time zone NOT NULL,
premium_since timestamp without time zone,
verified boolean NOT NULL,
disabled boolean NOT NULL,
deleted boolean NOT NULL,
email character varying,
flags bigint NOT NULL,
public_flags bigint NOT NULL,
purchased_flags bigint NOT NULL,
premium_usage_flags integer NOT NULL,
rights bigint NOT NULL,
data text NOT NULL,
fingerprints text NOT NULL,
extended_settings text NOT NULL,
"settingsIndex" integer
);`);
await queryRunner.query(`CREATE TABLE public.valid_registration_tokens (
token character varying NOT NULL,
created_at timestamp without time zone NOT NULL,
expires_at timestamp without time zone NOT NULL
);`);
await queryRunner.query(`CREATE TABLE public.voice_states (
id character varying NOT NULL,
guild_id character varying,
channel_id character varying,
user_id character varying,
session_id character varying NOT NULL,
token character varying,
deaf boolean NOT NULL,
mute boolean NOT NULL,
self_deaf boolean NOT NULL,
self_mute boolean NOT NULL,
self_stream boolean,
self_video boolean NOT NULL,
suppress boolean NOT NULL,
request_to_speak_timestamp timestamp without time zone
);`);
await queryRunner.query(`CREATE TABLE public.webhooks (
id character varying NOT NULL,
type integer NOT NULL,
name character varying,
avatar character varying,
token character varying,
guild_id character varying,
channel_id character varying,
application_id character varying,
user_id character varying,
source_guild_id character varying
);`);
await queryRunner.query(`ALTER TABLE ONLY public.members ALTER COLUMN index SET DEFAULT nextval('public.members_index_seq'::regclass);`);
await queryRunner.query(`ALTER TABLE ONLY public.migrations ALTER COLUMN id SET DEFAULT nextval('public.migrations_id_seq'::regclass);`);
await queryRunner.query(`ALTER TABLE ONLY public.user_settings ALTER COLUMN index SET DEFAULT nextval('public.user_settings_index_seq'::regclass);`);
await queryRunner.query(`ALTER TABLE ONLY public.embed_cache ADD CONSTRAINT "PK_0abb7581d4efc5a8b1361389c5e" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.messages ADD CONSTRAINT "PK_18325f38ae6de43878487eff986" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.audit_logs ADD CONSTRAINT "PK_1bb179d048bbc581caa3b013439" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.categories ADD CONSTRAINT "PK_24dbc6126a28ff948da33e97d3b" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.config ADD CONSTRAINT "PK_26489c99ddbb4c91631ef5cc791" PRIMARY KEY (key);`);
await queryRunner.query(`ALTER TABLE ONLY public.sessions ADD CONSTRAINT "PK_3238ef96f18b355b671619111bc" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.invites ADD CONSTRAINT "PK_33fd8a248db1cd832baa8aa25bf" PRIMARY KEY (code);`);
await queryRunner.query(`ALTER TABLE ONLY public.backup_codes ADD CONSTRAINT "PK_34ab957382dbc57e8fb53f1638f" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.rate_limits ADD CONSTRAINT "PK_3b4449f1f5fc167d921ee619f65" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.security_settings ADD CONSTRAINT "PK_4aec436cf81177ae97a1bcec3c7" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.client_release ADD CONSTRAINT "PK_4c4ea258342d2d6ba1be0a71a43" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.templates ADD CONSTRAINT "PK_515948649ce0bbbe391de702ae5" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.attachments ADD CONSTRAINT "PK_5e1f050bcff31e3084a1d662412" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.connected_accounts ADD CONSTRAINT "PK_70416f1da0be645bb31da01c774" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.message_role_mentions ADD CONSTRAINT "PK_74dba92cc300452a6e14b83ed44" PRIMARY KEY ("messagesId", "rolesId");`);
await queryRunner.query(`ALTER TABLE ONLY public.teams ADD CONSTRAINT "PK_7e5523774a38b08a6236d322403" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.message_channel_mentions ADD CONSTRAINT "PK_85cb45351497cd9d06a79ced65e" PRIMARY KEY ("messagesId", "channelsId");`);
await queryRunner.query(`ALTER TABLE ONLY public.migrations ADD CONSTRAINT "PK_8c82d7f526340ab734260ea46be" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.applications ADD CONSTRAINT "PK_938c0a27255637bde919591888f" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.member_roles ADD CONSTRAINT "PK_951c1d72a0fd1da8760b4a1fd66" PRIMARY KEY (index, role_id);`);
await queryRunner.query(`ALTER TABLE ONLY public.emojis ADD CONSTRAINT "PK_9adb96a675f555c6169bad7ba62" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.message_user_mentions ADD CONSTRAINT "PK_9b9b6e245ad47a48dbd7605d4fb" PRIMARY KEY ("messagesId", "usersId");`);
await queryRunner.query(`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "PK_9e8795cfc899ab7bdaa831e8527" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.sticker_packs ADD CONSTRAINT "PK_a27381efea0f876f5d3233af655" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.users ADD CONSTRAINT "PK_a3ffb1c0c8416b9fc6f907b7433" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.bans ADD CONSTRAINT "PK_a4d6f261bffa4615c62d756566a" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.voice_states ADD CONSTRAINT "PK_ada09a50c134fad1369b510e3ce" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.notes ADD CONSTRAINT "PK_af6206538ea96c4e77e9f400c3d" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.members ADD CONSTRAINT "PK_b4a6b8c2478e5df990909c6cf6a" PRIMARY KEY (index);`);
await queryRunner.query(`ALTER TABLE ONLY public.relationships ADD CONSTRAINT "PK_ba20e2f5cf487408e08e4dcecaf" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.connection_config ADD CONSTRAINT "PK_bc0554f736ad71dde346549488a" PRIMARY KEY (key);`);
await queryRunner.query(`ALTER TABLE ONLY public.channels ADD CONSTRAINT "PK_bc603823f3f741359c2339389f9" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.roles ADD CONSTRAINT "PK_c1433d71a4838793a49dcad46ab" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.team_members ADD CONSTRAINT "PK_ca3eae89dcf20c9fd95bf7460aa" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.recipients ADD CONSTRAINT "PK_de8fc5a9c364568f294798fe1e9" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.valid_registration_tokens ADD CONSTRAINT "PK_e0f5c8e3fcefe3134a092c50485" PRIMARY KEY (token);`);
await queryRunner.query(`ALTER TABLE ONLY public.stickers ADD CONSTRAINT "PK_e1dafa4063a5532645cc2810374" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.read_states ADD CONSTRAINT "PK_e6956a804978f01b713b1ed58e2" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "PK_e7e7f2a51bd6d96a9ac2aa560f9" PRIMARY KEY (id);`);
await queryRunner.query(`ALTER TABLE ONLY public.user_settings ADD CONSTRAINT "PK_e81f8bb92802737337d35c00981" PRIMARY KEY (index);`);
await queryRunner.query(`ALTER TABLE ONLY public.message_stickers ADD CONSTRAINT "PK_ed820c4093d0b8cd1d2bcf66087" PRIMARY KEY ("messagesId", "stickersId");`);
await queryRunner.query(`ALTER TABLE ONLY public.users ADD CONSTRAINT "REL_0c14beb78d8c5ccba66072adbc" UNIQUE ("settingsIndex");`);
await queryRunner.query(`ALTER TABLE ONLY public.applications ADD CONSTRAINT "REL_2ce5a55796fe4c2f77ece57a64" UNIQUE (bot_user_id);`);
await queryRunner.query(`ALTER TABLE ONLY public.notes ADD CONSTRAINT "UQ_74e6689b9568cc965b8bfc9150b" UNIQUE (owner_id, target_id);`);
await queryRunner.query(`ALTER TABLE ONLY public.templates ADD CONSTRAINT "UQ_be38737bf339baf63b1daeffb55" UNIQUE (code);`);
await queryRunner.query(`CREATE INDEX "IDX_05535bc695e9f7ee104616459d" ON public.messages USING btree (author_id);`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_0abf8b443321bd3cf7f81ee17a" ON public.read_states USING btree (channel_id, user_id);`);
await queryRunner.query(`CREATE INDEX "IDX_29d63eb1a458200851bc37d074" ON public.message_role_mentions USING btree ("rolesId");`);
await queryRunner.query(`CREATE INDEX "IDX_2a27102ecd1d81b4582a436092" ON public.message_channel_mentions USING btree ("messagesId");`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_3ed7a60fb7dbe04e1ba9332a8b" ON public.messages USING btree (channel_id, id);`);
await queryRunner.query(`CREATE INDEX "IDX_40bb6f23e7cc133292e92829d2" ON public.message_stickers USING btree ("messagesId");`);
await queryRunner.query(`CREATE INDEX "IDX_5d7ddc8a5f9c167f548625e772" ON public.member_roles USING btree (index);`);
await queryRunner.query(`CREATE INDEX "IDX_86b9109b155eb70c0a2ca3b4b6" ON public.messages USING btree (channel_id);`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_a0b2ff0a598df0b0d055934a17" ON public.relationships USING btree (from_id, to_id);`);
await queryRunner.query(`CREATE INDEX "IDX_a343387fc560ef378760681c23" ON public.message_user_mentions USING btree ("messagesId");`);
await queryRunner.query(`CREATE INDEX "IDX_a8242cf535337a490b0feaea0b" ON public.message_role_mentions USING btree ("messagesId");`);
await queryRunner.query(`CREATE INDEX "IDX_b831eb18ceebd28976239b1e2f" ON public.message_user_mentions USING btree ("usersId");`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_bb2bf9386ac443afbbbf9f12d3" ON public.members USING btree (id, guild_id);`);
await queryRunner.query(`CREATE INDEX "IDX_bdb8c09e1464cabf62105bf4b9" ON public.message_channel_mentions USING btree ("channelsId");`);
await queryRunner.query(`CREATE INDEX "IDX_e22a70819d07659c7a71c112a1" ON public.message_stickers USING btree ("stickersId");`);
await queryRunner.query(`CREATE INDEX "IDX_e9080e7a7997a0170026d5139c" ON public.member_roles USING btree (role_id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.voice_states ADD CONSTRAINT "FK_03779ef216d4b0358470d9cb748" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_05535bc695e9f7ee104616459d3" FOREIGN KEY (author_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.bans ADD CONSTRAINT "FK_07ad88c86d1f290d46748410d58" FOREIGN KEY (executor_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.sessions ADD CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.users ADD CONSTRAINT "FK_0c14beb78d8c5ccba66072adbc7" FOREIGN KEY ("settingsIndex") REFERENCES public.user_settings(index);`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "FK_0d523f6f997c86e052c49b1455f" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.invites ADD CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY (target_user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.teams ADD CONSTRAINT "FK_13f00abf7cb6096c43ecaf8c108" FOREIGN KEY (owner_user_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.invites ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY (inviter_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.members ADD CONSTRAINT "FK_16aceddd5b89825b8ed6029ad1c" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.stickers ADD CONSTRAINT "FK_193d551d852aca5347ef5c9f205" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.read_states ADD CONSTRAINT "FK_195f92e4dd1254a4e348c043763" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.notes ADD CONSTRAINT "FK_23e08e5b4481711d573e1abecdc" FOREIGN KEY (target_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.members ADD CONSTRAINT "FK_28b53062261b996d9c99fa12404" FOREIGN KEY (id) REFERENCES public.users(id) ON DELETE CASCADE;`);
await queryRunner.query(
`ALTER TABLE ONLY public.message_role_mentions ADD CONSTRAINT "FK_29d63eb1a458200851bc37d074b" FOREIGN KEY ("rolesId") REFERENCES public.roles(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_channel_mentions ADD CONSTRAINT "FK_2a27102ecd1d81b4582a4360921" FOREIGN KEY ("messagesId") REFERENCES public.messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.applications ADD CONSTRAINT "FK_2ce5a55796fe4c2f77ece57a647" FOREIGN KEY (bot_user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.recipients ADD CONSTRAINT "FK_2f18ee1ba667f233ae86c0ea60e" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.channels ADD CONSTRAINT "FK_3274522d14af40540b1a883fc80" FOREIGN KEY (parent_id) REFERENCES public.channels(id);`);
await queryRunner.query(`ALTER TABLE ONLY public.channels ADD CONSTRAINT "FK_3873ed438575cce703ecff4fc7b" FOREIGN KEY (owner_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "FK_3a285f4f49c40e0706d3018bc9f" FOREIGN KEY (source_guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.audit_logs ADD CONSTRAINT "FK_3cd01cd3ae7aab010310d96ac8e" FOREIGN KEY (target_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.invites ADD CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_stickers ADD CONSTRAINT "FK_40bb6f23e7cc133292e92829d28" FOREIGN KEY ("messagesId") REFERENCES public.messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.read_states ADD CONSTRAINT "FK_40da2fca4e0eaf7a23b5bfc5d34" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.templates ADD CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11" FOREIGN KEY (source_guild_id) REFERENCES public.guilds(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.sticker_packs ADD CONSTRAINT "FK_448fafba4355ee1c837bbc865f1" FOREIGN KEY ("coverStickerId") REFERENCES public.stickers(id);`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "FK_487a7af59d189f744fe394368fc" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.emojis ADD CONSTRAINT "FK_4b988e0db89d94cebcf07f598cc" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.bans ADD CONSTRAINT "FK_5999e8e449f80a236ff72023559" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_5d3ec1cb962de6488637fd779d6" FOREIGN KEY (application_id) REFERENCES public.applications(id);`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.member_roles ADD CONSTRAINT "FK_5d7ddc8a5f9c167f548625e772e" FOREIGN KEY (index) REFERENCES public.members(index) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.voice_states ADD CONSTRAINT "FK_5fe1d5f931a67e85039c640001b" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.recipients ADD CONSTRAINT "FK_6157e8b6ba4e6e3089616481fe2" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY (message_reference_id) REFERENCES public.messages(id);`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.attachments ADD CONSTRAINT "FK_623e10eec51ada466c5038979e3" FOREIGN KEY (message_id) REFERENCES public.messages(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.invites ADD CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.backup_codes ADD CONSTRAINT "FK_70066ea80d2f4b871beda32633b" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_86b9109b155eb70c0a2ca3b4b6d" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY (public_updates_channel_id) REFERENCES public.channels(id);`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.stickers ADD CONSTRAINT "FK_8f4ee73f2bb2325ff980502e158" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY (rules_channel_id) REFERENCES public.channels(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.relationships ADD CONSTRAINT "FK_9af4194bab1250b1c584ae4f1d7" FOREIGN KEY (from_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.relationships ADD CONSTRAINT "FK_9c7f6b98a9843b76dce1b0c878b" FOREIGN KEY (to_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY (widget_channel_id) REFERENCES public.channels(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.bans ADD CONSTRAINT "FK_9d3ab7dd180ebdd245cdb66ecad" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.voice_states ADD CONSTRAINT "FK_9f8d389866b40b6657edd026dd4" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_user_mentions ADD CONSTRAINT "FK_a343387fc560ef378760681c236" FOREIGN KEY ("messagesId") REFERENCES public.messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.applications ADD CONSTRAINT "FK_a36ed02953077f408d0f3ebc424" FOREIGN KEY (team_id) REFERENCES public.teams(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_role_mentions ADD CONSTRAINT "FK_a8242cf535337a490b0feaea0b4" FOREIGN KEY ("messagesId") REFERENCES public.messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_b0525304f2262b7014245351c76" FOREIGN KEY (member_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_b193588441b085352a4c0109423" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_user_mentions ADD CONSTRAINT "FK_b831eb18ceebd28976239b1e2f8" FOREIGN KEY ("usersId") REFERENCES public.users(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.audit_logs ADD CONSTRAINT "FK_bd2726fd31b35443f2245b93ba0" FOREIGN KEY (user_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.message_channel_mentions ADD CONSTRAINT "FK_bdb8c09e1464cabf62105bf4b9d" FOREIGN KEY ("channelsId") REFERENCES public.channels(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.channels ADD CONSTRAINT "FK_c253dafe5f3a03ec00cd8fb4581" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.team_members ADD CONSTRAINT "FK_c2bf4967c8c2a6b845dadfbf3d4" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.roles ADD CONSTRAINT "FK_c32c1ab1c4dc7dcb0278c4b1b8b" FOREIGN KEY (guild_id) REFERENCES public.guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "FK_c3e5305461931763b56aa905f1c" FOREIGN KEY (application_id) REFERENCES public.applications(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY (system_channel_id) REFERENCES public.channels(id);`);
await queryRunner.query(`ALTER TABLE ONLY public.templates ADD CONSTRAINT "FK_d7374b7f8f5fbfdececa4fb62e1" FOREIGN KEY (creator_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.webhooks ADD CONSTRAINT "FK_df528cf77e82f8032230e7e37d8" FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.message_stickers ADD CONSTRAINT "FK_e22a70819d07659c7a71c112a1f" FOREIGN KEY ("stickersId") REFERENCES public.stickers(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY (template_id) REFERENCES public.templates(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.applications ADD CONSTRAINT "FK_e57508958bf92b9d9d25231b5e8" FOREIGN KEY (owner_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.stickers ADD CONSTRAINT "FK_e7cfa5cefa6661b3fb8fda8ce69" FOREIGN KEY (pack_id) REFERENCES public.sticker_packs(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.member_roles ADD CONSTRAINT "FK_e9080e7a7997a0170026d5139c1" FOREIGN KEY (role_id) REFERENCES public.roles(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE ONLY public.connected_accounts ADD CONSTRAINT "FK_f47244225a6a1eac04a3463dd90" FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY (afk_channel_id) REFERENCES public.channels(id);`);
await queryRunner.query(`ALTER TABLE ONLY public.messages ADD CONSTRAINT "FK_f83c04bcf1df4e5c0e7a52ed348" FOREIGN KEY (webhook_id) REFERENCES public.webhooks(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.notes ADD CONSTRAINT "FK_f9e103f8ae67cb1787063597925" FOREIGN KEY (owner_id) REFERENCES public.users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE ONLY public.emojis ADD CONSTRAINT "FK_fa7ddd5f9a214e28ce596548421" FOREIGN KEY (user_id) REFERENCES public.users(id);`);
await queryRunner.query(`ALTER TABLE ONLY public.guilds ADD CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY (owner_id) REFERENCES public.users(id);`);
await queryRunner.query(
`ALTER TABLE ONLY public.team_members ADD CONSTRAINT "FK_fdad7d5768277e60c40e01cdcea" FOREIGN KEY (team_id) REFERENCES public.teams(id) ON DELETE CASCADE;`,
);
}
public async down(_: QueryRunner): Promise<void> {
throw new Error("Can't revert this: just throw away your database lol");
}
}
@@ -0,0 +1,37 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { MigrationInterface, QueryRunner } from "typeorm";
export class templateDeleteCascade1673609867556 implements MigrationInterface {
name = "templateDeleteCascade1673609867556";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "templates" DROP CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11"`);
await queryRunner.query(
`ALTER TABLE "templates" ADD CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11" FOREIGN KEY ("source_guild_id") REFERENCES "guilds"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "templates" DROP CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11"`);
await queryRunner.query(
`ALTER TABLE "templates" ADD CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11" FOREIGN KEY ("source_guild_id") REFERENCES "guilds"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
}
@@ -0,0 +1,39 @@
/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { MigrationInterface, QueryRunner } from "typeorm";
export class webauthn1675044825710 implements MigrationInterface {
name = "webauthn1675044825710";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "security_keys" ("id" character varying NOT NULL, "user_id" character varying, "key_id" character varying NOT NULL, "public_key" character varying NOT NULL, "counter" integer NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_6e95cdd91779e7cca06d1fff89c" PRIMARY KEY ("id"))`,
);
await queryRunner.query(`ALTER TABLE "users" ADD "webauthn_enabled" boolean NOT NULL DEFAULT false`);
await queryRunner.query(
`ALTER TABLE "security_keys" ADD CONSTRAINT "FK_24c97d0771cafedce6d7163eaad" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "security_keys" DROP CONSTRAINT "FK_24c97d0771cafedce6d7163eaad"`);
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "webauthn_enabled"`);
await queryRunner.query(`DROP TABLE "security_keys"`);
}
}
@@ -0,0 +1,38 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class guildChannelOrdering1696420827239 implements MigrationInterface {
name = "guildChannelOrdering1696420827239";
public async up(queryRunner: QueryRunner): Promise<void> {
const guilds = await queryRunner.query(`SELECT id FROM guilds`, undefined, true);
await queryRunner.query(`ALTER TABLE guilds ADD channel_ordering text NOT NULL DEFAULT '[]'`);
for (const guild_id of guilds.records.map((x) => x.id)) {
const channels: Array<{ position: number; id: string }> = (await queryRunner.query(`SELECT id, position FROM channels WHERE guild_id = $1`, [guild_id], true)).records;
channels.sort((a, b) => a.position - b.position);
await queryRunner.query(`UPDATE guilds SET channel_ordering = $1 WHERE id = $2`, [JSON.stringify(channels.map((x) => x.id)), guild_id]);
}
await queryRunner.query(`ALTER TABLE channels DROP COLUMN position`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE channels ADD position integer NOT NULL DEFAULT 0`);
const guilds = await queryRunner.query(`SELECT id, channel_ordering FROM guilds`, undefined, true);
for (const guild of guilds.records) {
const channel_ordering: string[] = JSON.parse(guild.channel_ordering);
for (let i = 0; i < channel_ordering.length; i++) {
const channel_id = channel_ordering[i];
await queryRunner.query(`UPDATE channels SET position = $1 WHERE id = $2`, [i, channel_id]);
}
}
await queryRunner.query(`ALTER TABLE guilds DROP COLUMN channel_ordering`);
}
}
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessageFlagsNotNull1713116476900 implements MigrationInterface {
name = "MessageFlagsNotNull1713116476900";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages RENAME COLUMN flags TO flags_old;");
await queryRunner.query("ALTER TABLE messages ADD COLUMN flags integer NOT NULL DEFAULT 0;");
await queryRunner.query("UPDATE messages SET flags = COALESCE(flags_old, 0);");
await queryRunner.query("ALTER TABLE messages DROP COLUMN flags_old;");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages RENAME COLUMN flags TO flags_new;");
await queryRunner.query("ALTER TABLE messages ADD COLUMN flags integer;");
await queryRunner.query("UPDATE messages SET flags = flags_new;");
await queryRunner.query("ALTER TABLE messages DROP COLUMN flags_new;");
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class NewUserSettings1719776735000 implements MigrationInterface {
name = "NewUserSettings1719776735000";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE user_settings ADD COLUMN friend_discovery_flags integer DEFAULT 0;");
await queryRunner.query("ALTER TABLE user_settings ADD COLUMN view_nsfw_guilds boolean DEFAULT true;");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE user_settings DROP COLUMN friend_discovery_flags;");
await queryRunner.query("ALTER TABLE user_settings DROP COLUMN view_nsfw_guilds;");
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessagePollObject1720157926878 implements MigrationInterface {
name = "MessagePollObject1720157926878";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages ADD poll text NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages DROP COLUMN poll");
}
}
@@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Badges1720628601997 implements MigrationInterface {
name = "Badges1720628601997";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "badges" ("id" character varying NOT NULL, "description" character varying NOT NULL, "icon" character varying NOT NULL, "link" character varying, CONSTRAINT "PK_8a651318b8de577e8e217676466" PRIMARY KEY ("id"))`,
);
await queryRunner.query(`ALTER TABLE "users" ADD "badge_ids" text`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "badge_ids"`);
await queryRunner.query(`DROP TABLE "badges"`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class WebhookMessageProperties1721298824927 implements MigrationInterface {
name = "WebhookMessageProperties1721298824927";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages ADD username text NULL");
await queryRunner.query("ALTER TABLE messages ADD avatar text NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE messages DROP COLUMN username");
await queryRunner.query("ALTER TABLE messages DROP COLUMN avatar");
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class client_status1723347738541 implements MigrationInterface {
name = "client_status1723347738541";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE sessions ADD client_status text NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE sessions DROP COLUMN client_status");
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DiscoveryCategoryIcon1723577874393 implements MigrationInterface {
name = "DiscoveryCategoryIcon1723577874393";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE categories ADD icon text NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE categories DROP COLUMN icon");
}
}
@@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class WebhookSourceChannel1723644478176 implements MigrationInterface {
name = "WebhookSourceChannel1723644478176";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE webhooks ADD COLUMN source_channel_id VARCHAR(255) NULL DEFAULT NULL");
await queryRunner.query(
"ALTER TABLE webhooks ADD CONSTRAINT FK_d64f38834fa676f6caa4786ddd6 FOREIGN KEY (source_channel_id) REFERENCES channels (id) ON UPDATE NO ACTION ON DELETE CASCADE",
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE webhooks DROP CONSTRAINT FK_d64f38834fa676f6caa4786ddd6");
await queryRunner.query("ALTER TABLE webhooks DROP COLUMN source_channel_id");
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class TeamMemberRole1724477620293 implements MigrationInterface {
name = "TeamMemberRole1724477620293";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE team_members ADD COLUMN role text NOT NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE team_members DROP COLUMN role");
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ApplicationProperties1725090962922 implements MigrationInterface {
name = "ApplicationProperties1725090962922";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE applications ADD COLUMN guild_id TEXT NULL DEFAULT NULL");
await queryRunner.query("ALTER TABLE applications ADD COLUMN custom_install_url TEXT NULL DEFAULT NULL");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE applications DROP COLUMN guild_id");
await queryRunner.query("ALTER TABLE applications DROP COLUMN custom_install_url");
}
}
@@ -0,0 +1,35 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Voice1745625724865 implements MigrationInterface {
name = "Voice1745625724865";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "streams" ("id" character varying NOT NULL, "owner_id" character varying NOT NULL, "channel_id" character varying NOT NULL, "endpoint" character varying NOT NULL, CONSTRAINT "PK_40440b6f569ebc02bc71c25c499" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE TABLE "stream_sessions" ("id" character varying NOT NULL, "stream_id" character varying NOT NULL, "user_id" character varying NOT NULL, "token" character varying, "session_id" character varying NOT NULL, "used" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_49bdc3f66394c12478f8371c546" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "streams" ADD CONSTRAINT "FK_1b566f9b54d1cda271da53ac82f" FOREIGN KEY ("owner_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "streams" ADD CONSTRAINT "FK_5101f0cded27ff0aae78fc4eed7" FOREIGN KEY ("channel_id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "stream_sessions" ADD CONSTRAINT "FK_8b5a028a34dae9ee54af37c9c32" FOREIGN KEY ("stream_id") REFERENCES "streams"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "stream_sessions" ADD CONSTRAINT "FK_13ae5c29aff4d0890c54179511a" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "stream_sessions" DROP CONSTRAINT "FK_13ae5c29aff4d0890c54179511a"`);
await queryRunner.query(`ALTER TABLE "stream_sessions" DROP CONSTRAINT "FK_8b5a028a34dae9ee54af37c9c32"`);
await queryRunner.query(`ALTER TABLE "streams" DROP CONSTRAINT "FK_5101f0cded27ff0aae78fc4eed7"`);
await queryRunner.query(`ALTER TABLE "streams" DROP CONSTRAINT "FK_1b566f9b54d1cda271da53ac82f"`);
await queryRunner.query(`DROP TABLE "stream_sessions"`);
await queryRunner.query(`DROP TABLE "streams"`);
}
}
@@ -0,0 +1,20 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UserSettingsProtos1752157979333 implements MigrationInterface {
name = "UserSettingsProtos1752157979333";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE IF EXISTS "user_settings_protos"`);
await queryRunner.query(
`CREATE TABLE "user_settings_protos" ("user_id" character varying NOT NULL, "userSettings" text, "frecencySettings" text, CONSTRAINT "PK_8ff3d1961a48b693810c9f99853" PRIMARY KEY ("user_id"))`,
);
await queryRunner.query(
`ALTER TABLE "user_settings_protos" ADD CONSTRAINT "FK_8ff3d1961a48b693810c9f99853" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "user_settings_protos" DROP CONSTRAINT "FK_8ff3d1961a48b693810c9f99853"`);
await queryRunner.query(`DROP TABLE "user_settings_protos"`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class RoleColors1752321571508 implements MigrationInterface {
name = "RoleColors1752321571508";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "roles" ADD "colors" text`);
await queryRunner.query(`UPDATE "roles" SET "colors" = jsonb_build_object('primary_color', "color") WHERE "colors" IS NULL`);
await queryRunner.query(`ALTER TABLE "roles" ALTER COLUMN "colors" SET NOT NULL`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "roles" DROP COLUMN "colors"`);
}
}
@@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessagePinnedAt1752383879533 implements MigrationInterface {
name = "MessagePinnedAt1752383879533";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" ADD "pinned_at" TIMESTAMP`);
await queryRunner.query(`UPDATE "messages" SET "pinned_at" = NOW() WHERE "pinned" = true`);
await queryRunner.query(`ALTER TABLE "messages" DROP COLUMN "pinned"`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" ADD "pinned" boolean`);
await queryRunner.query(`UPDATE "messages" SET "pinned" = true WHERE "pinned_at" IS NOT NULL`);
await queryRunner.query(`ALTER TABLE "messages" DROP COLUMN "pinned_at"`);
}
}
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Automod1753639700904 implements MigrationInterface {
name = "Automod1753639700904";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "automod_rules" ("id" character varying NOT NULL, "enabled" boolean NOT NULL, "event_type" integer NOT NULL, "exempt_channels" text NOT NULL, "exempt_roles" text NOT NULL, "guild_id" character varying NOT NULL, "name" character varying NOT NULL, "position" integer NOT NULL, "trigger_type" integer NOT NULL, "trigger_metadata" text, "actions" text NOT NULL, "creator_id" character varying, CONSTRAINT "PK_99789ae863507f5aed9e58d7866" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "automod_rules" ADD CONSTRAINT "FK_12d3d60b961393d310429c062b7" FOREIGN KEY ("creator_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "automod_rules" DROP CONSTRAINT "FK_12d3d60b961393d310429c062b7"`);
await queryRunner.query(`DROP TABLE "automod_rules"`);
}
}
@@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class CloudAttachments1758654246197 implements MigrationInterface {
name = "CloudAttachments1758654246197";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "cloud_attachments" ("id" character varying NOT NULL, "user_id" character varying, "channel_id" character varying, "upload_filename" character varying NOT NULL, "user_attachment_id" character varying, "user_filename" character varying NOT NULL, "user_file_size" integer, "user_original_content_type" character varying, "user_is_clip" boolean, "size" integer, "height" integer, "width" integer, "content_type" character varying, "userId" character varying, "channelId" character varying, CONSTRAINT "PK_5794827a3ee7c9318612dcb70c8" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_e6b32df2004e8ad0f488b4a2019" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_cab965a18f8ca30293bff3d50a8" FOREIGN KEY ("channelId") REFERENCES "channels"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_cab965a18f8ca30293bff3d50a8"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_e6b32df2004e8ad0f488b4a2019"`);
await queryRunner.query(`DROP TABLE "cloud_attachments"`);
}
}
@@ -0,0 +1,31 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class CloudAttachmentsFixIdRefs1758654621365 implements MigrationInterface {
name = "CloudAttachmentsFixIdRefs1758654621365";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_cab965a18f8ca30293bff3d50a8"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_e6b32df2004e8ad0f488b4a2019"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP COLUMN "channelId"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP COLUMN "userId"`);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_8bf8cc8767e48cb482ff644fce6" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_998d5fe91008ba5b09e1322104c" FOREIGN KEY ("channel_id") REFERENCES "channels"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_998d5fe91008ba5b09e1322104c"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" DROP CONSTRAINT "FK_8bf8cc8767e48cb482ff644fce6"`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" ADD "userId" character varying`);
await queryRunner.query(`ALTER TABLE "cloud_attachments" ADD "channelId" character varying`);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_e6b32df2004e8ad0f488b4a2019" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "cloud_attachments" ADD CONSTRAINT "FK_cab965a18f8ca30293bff3d50a8" FOREIGN KEY ("channelId") REFERENCES "channels"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ApplicationCommands1760622755598 implements MigrationInterface {
name = "ApplicationCommands1760622755598";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "application_commands" ("id" character varying NOT NULL, "type" integer NOT NULL DEFAULT '1', "application_id" character varying NOT NULL, "guild_id" character varying, "name" character varying NOT NULL, "name_localizations" text, "description" character varying NOT NULL, "description_localizations" text, "options" text, "default_member_permissions" character varying, "dm_permission" boolean NOT NULL DEFAULT true, "permissions" text, "nsfw" boolean NOT NULL DEFAULT false, "integration_types" text, "global_popularity_rank" integer NOT NULL DEFAULT '0', "contexts" text, "version" character varying NOT NULL DEFAULT '0', "handler" integer NOT NULL DEFAULT '0', CONSTRAINT "PK_0f73c2f025989c407947e1f75fe" PRIMARY KEY ("id"))`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "application_commands"`);
}
}
@@ -0,0 +1,56 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ReconcileMigrationAttempts1760622755598 implements MigrationInterface {
name = "ReconcileMigrationAttempts1760622755598";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "webhooks" DROP CONSTRAINT IF EXISTS "fk_d64f38834fa676f6caa4786ddd6"`);
await queryRunner.query(`ALTER TABLE "webhooks" ALTER COLUMN "source_channel_id" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "messages" ALTER COLUMN "username" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "messages" ALTER COLUMN "avatar" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "channels" ALTER COLUMN "default_thread_rate_limit_per_user" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "client_status" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "user_settings" ALTER COLUMN "friend_discovery_flags" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "user_settings" ALTER COLUMN "view_nsfw_guilds" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "public_flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "purchased_flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "team_members" ALTER COLUMN "role" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "team_members" ALTER COLUMN "role" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "applications" ALTER COLUMN "guild_id" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "applications" ALTER COLUMN "custom_install_url" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "categories" ALTER COLUMN "icon" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "user_settings_protos" ALTER COLUMN "userSettings" TYPE character varying`);
await queryRunner.query(`ALTER TABLE "user_settings_protos" ALTER COLUMN "frecencySettings" TYPE character varying`);
await queryRunner.query(
`ALTER TABLE "webhooks" ADD CONSTRAINT "FK_4495b7032a33c6b8b605d030398" FOREIGN KEY ("source_channel_id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "applications" ADD CONSTRAINT "FK_e5bf78cdbbe9ba91062d74c5aba" FOREIGN KEY ("guild_id") REFERENCES "guilds"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "applications" DROP CONSTRAINT "FK_e5bf78cdbbe9ba91062d74c5aba"`);
await queryRunner.query(`ALTER TABLE "webhooks" DROP CONSTRAINT "FK_4495b7032a33c6b8b605d030398"`);
await queryRunner.query(`ALTER TABLE "user_settings_protos" ALTER COLUMN "frecencySettings" TYPE text`);
await queryRunner.query(`ALTER TABLE "user_settings_protos" ALTER COLUMN "userSettings" TYPE text`);
await queryRunner.query(`ALTER TABLE "categories" ALTER COLUMN "icon" TYPE text`);
await queryRunner.query(`ALTER TABLE "applications" ALTER COLUMN "custom_install_url" TYPE text`);
await queryRunner.query(`ALTER TABLE "applications" ALTER COLUMN "guild_id" TYPE text`);
await queryRunner.query(`ALTER TABLE "team_members" ALTER COLUMN "role" TYPE text`);
await queryRunner.query(`ALTER TABLE "team_members" ALTER COLUMN "role" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "purchased_flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "public_flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "users" ALTER COLUMN "flags" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "user_settings" ALTER COLUMN "view_nsfw_guilds" SET DEFAULT true`);
await queryRunner.query(`ALTER TABLE "user_settings" ALTER COLUMN "friend_discovery_flags" SET DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "client_status" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "channels" ALTER COLUMN "default_thread_rate_limit_per_user" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "messages" ALTER COLUMN "avatar" TYPE text`);
await queryRunner.query(`ALTER TABLE "messages" ALTER COLUMN "username" TYPE text`);
await queryRunner.query(`ALTER TABLE "webhooks" ALTER COLUMN "source_channel_id" TYPE character varying(255)`);
await queryRunner.query(`ALTER TABLE "webhooks" ALTER COLUMN "source_channel_id" SET DEFAULT NULL`);
// await queryRunner.query(`ALTER TABLE "webhooks" ADD CONSTRAINT "fk_d64f38834fa676f6caa4786ddd6" FOREIGN KEY ("source_channel_id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessageInteractionMetadata1760694225225 implements MigrationInterface {
name = "MessageInteractionMetadata1760694225225";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" ADD "interaction_metadata" text`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" DROP COLUMN "interaction_metadata"`);
}
}
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessageReferenceFix1760961911873 implements MigrationInterface {
name = "MessageReferenceFix1760961911873";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" DROP CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174"`);
await queryRunner.query(
`ALTER TABLE "messages" ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY ("message_reference_id") REFERENCES "messages"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" DROP CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174"`);
await queryRunner.query(
`ALTER TABLE "messages" ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY ("message_reference_id") REFERENCES "messages"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
}
@@ -0,0 +1,10 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DeleteBotUsersWithoutAnApplication1761113394664 implements MigrationInterface {
name = "DeleteBotUsersWithoutAnApplication1761113394664";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM users WHERE bot = true AND id NOT IN (SELECT bot_user_id FROM applications);`);
}
public async down(_: QueryRunner): Promise<void> {}
}
@@ -0,0 +1,16 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ApplicationCommandsOptionsDefault1761209437070 implements MigrationInterface {
name = "ApplicationCommandsOptionsDefault1761209437070";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`UPDATE "application_commands" SET "options" = '[]' WHERE "options" IS NULL`);
await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" SET DEFAULT '[]'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "application_commands" ALTER COLUMN "options" DROP NOT NULL`);
}
}
@@ -0,0 +1,12 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class FixGifStickersFormatType1762611552514 implements MigrationInterface {
name = "FixGifStickersFormatType1762611552514";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`UPDATE "stickers" SET "format_type" = 4 WHERE "format_type" = 0;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`UPDATE "stickers" SET "format_type" = 0 WHERE "format_type" = 4;`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DefaultActivitiesToEmptyArray1763630755675 implements MigrationInterface {
name = "DefaultActivitiesToEmptyArray1763630755675";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "activities" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "activities" SET DEFAULT '[]'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "activities" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "activities" DROP NOT NULL`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DontIpBanBanner1765143034407 implements MigrationInterface {
name = "DontIpBanBanner1765143034407";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "bans" ALTER COLUMN "ip" DROP NOT NULL`);
await queryRunner.query(`UPDATE "bans" SET "ip" = NULL`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`UPDATE "bans" SET "ip" = '0.0.0.0' WHERE "ip" IS NULL`);
await queryRunner.query(`ALTER TABLE "bans" ALTER COLUMN "ip" SET NOT NULL`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MessageSnapshots1765185286988 implements MigrationInterface {
name = "MessageSnapshots1765185286988";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" ADD "message_snapshots" text NOT NULL DEFAULT '[]'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" DROP COLUMN "message_snapshots"`);
}
}
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class InstanceBanTable1765578570423 implements MigrationInterface {
name = "InstanceBanTable1765578570423";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "instance_bans" ("id" character varying NOT NULL, "created_at" TIMESTAMP NOT NULL DEFAULT now(), "reason" character varying NOT NULL, "user_id" character varying, "fingerprint" character varying, "ip_address" character varying, "is_from_other_instance_ban" boolean NOT NULL DEFAULT false, "origin_instance_ban_id" character varying, CONSTRAINT "REL_0b02d18d0d830f160c921192a3" UNIQUE ("origin_instance_ban_id"), CONSTRAINT "PK_3aa6e80a6d325601054892b1340" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "instance_bans" ADD CONSTRAINT "FK_0b02d18d0d830f160c921192a30" FOREIGN KEY ("origin_instance_ban_id") REFERENCES "instance_bans"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "instance_bans" DROP CONSTRAINT "FK_0b02d18d0d830f160c921192a30"`);
await queryRunner.query(`DROP TABLE "instance_bans"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class InstanceBanAllowlist1765587835846 implements MigrationInterface {
name = "InstanceBanAllowlist1765587835846";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "instance_bans" ADD "is_allowlisted" boolean NOT NULL DEFAULT false`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "instance_bans" DROP COLUMN "is_allowlisted"`);
}
}
@@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DropDefaultIPDataKey1765665440000 implements MigrationInterface {
name = "DropDefaultIPDataKey1765665440000";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`UPDATE "config" SET "value" = NULL WHERE "key" = 'security_ipdataApiKey' AND "value" = '"eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9"'`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`UPDATE "config" SET "value" = '"eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9"' WHERE "key" = 'security_ipdataApiKey' AND "value" IS NULL`,
);
}
}
@@ -0,0 +1,41 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ExtendedSessionInfo1765863159930 implements MigrationInterface {
name = "ExtendedSessionInfo1765863159930";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" DROP CONSTRAINT "PK_3238ef96f18b355b671619111bc"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "id"`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "is_admin_session" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "created_at" TIMESTAMP NOT NULL DEFAULT now()`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "last_seen" TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00'`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "last_seen_ip" character varying NOT NULL DEFAULT '127.0.0.1'`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "last_seen_location" character varying`);
await queryRunner.query(`ALTER TABLE "webhooks" ALTER COLUMN "source_channel_id" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "sessions" DROP CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19"`);
await queryRunner.query(`ALTER TABLE "sessions" ADD CONSTRAINT "PK_9340188c93349808f10d1db74a8" PRIMARY KEY ("session_id")`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "user_id" SET NOT NULL`);
await queryRunner.query(`CREATE INDEX "IDX_085d540d9f418cfbdc7bd55bb1" ON "sessions" ("user_id") `);
await queryRunner.query(
`ALTER TABLE "sessions" ADD CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" DROP CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19"`);
await queryRunner.query(`ALTER TABLE "webhooks" DROP CONSTRAINT "FK_4495b7032a33c6b8b605d030398"`);
await queryRunner.query(`DROP INDEX "public"."IDX_085d540d9f418cfbdc7bd55bb1"`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "user_id" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" DROP CONSTRAINT "PK_9340188c93349808f10d1db74a8"`);
await queryRunner.query(
`ALTER TABLE "sessions" ADD CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "last_seen_location"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "last_seen_ip"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "last_seen"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "created_at"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "is_admin_session"`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "id" character varying NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ADD CONSTRAINT "PK_3238ef96f18b355b671619111bc" PRIMARY KEY ("id")`);
}
}
@@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UpdateSessionInfo1765932247127 implements MigrationInterface {
name = "UpdateSessionInfo1765932247127";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" ADD "last_seen_location_info" text`);
await queryRunner.query(`ALTER TABLE "sessions" ADD "session_nickname" character varying`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen_ip" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen_ip" DROP DEFAULT`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen_ip" SET DEFAULT '127.0.0.1'`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen_ip" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen" SET DEFAULT '1970-01-01 00:00:00'`);
await queryRunner.query(`ALTER TABLE "sessions" ALTER COLUMN "last_seen" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "session_nickname"`);
await queryRunner.query(`ALTER TABLE "sessions" DROP COLUMN "last_seen_location_info"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DropExtendedSettings1765967660704 implements MigrationInterface {
name = "DropExtendedSettings1765967660704";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "extended_settings"`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" ADD "extended_settings" text NOT NULL`);
}
}
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Threads1769636200774 implements MigrationInterface {
name = "Threads1769636200774";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" ADD "thread_id" character varying`);
await queryRunner.query(`ALTER TABLE "channels" ADD "thread_metadata" text`);
await queryRunner.query(`ALTER TABLE "channels" ADD "member_count" integer`);
await queryRunner.query(`ALTER TABLE "channels" ADD "message_count" integer`);
await queryRunner.query(`ALTER TABLE "channels" ADD "total_message_sent" integer`);
await queryRunner.query(
`ALTER TABLE "messages" ADD CONSTRAINT "FK_bb3af7f695d50083e6523290d41" FOREIGN KEY ("thread_id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "messages" DROP CONSTRAINT "FK_bb3af7f695d50083e6523290d41"`);
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "total_message_sent"`);
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "message_count"`);
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "member_count"`);
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "thread_metadata"`);
await queryRunner.query(`ALTER TABLE "messages" DROP COLUMN "thread_id"`);
}
}
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ThreadMembers1769653303971 implements MigrationInterface {
name = "ThreadMembers1769653303971";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "thread_members" ("index" SERIAL NOT NULL, "id" character varying NOT NULL, "member_id" integer NOT NULL, "join_timestamp" TIMESTAMP NOT NULL, "muted" boolean NOT NULL, "mute_config" text, "flags" integer NOT NULL, CONSTRAINT "PK_22232a9f7a08fb9967a9c78da53" PRIMARY KEY ("index"))`,
);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_bde0970b6a26bdbd83508addd2" ON "thread_members" ("id", "member_id") `);
await queryRunner.query(
`ALTER TABLE "thread_members" ADD CONSTRAINT "FK_cf20e37d71b0e1bf1ab633861c8" FOREIGN KEY ("id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
await queryRunner.query(
`ALTER TABLE "thread_members" ADD CONSTRAINT "FK_606ac45e8756d3440c584477f4e" FOREIGN KEY ("member_id") REFERENCES "members"("index") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "thread_members" DROP CONSTRAINT "FK_606ac45e8756d3440c584477f4e"`);
await queryRunner.query(`ALTER TABLE "thread_members" DROP CONSTRAINT "FK_cf20e37d71b0e1bf1ab633861c8"`);
await queryRunner.query(`DROP INDEX "public"."IDX_bde0970b6a26bdbd83508addd2"`);
await queryRunner.query(`DROP TABLE "thread_members"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ThreadMembersIdx1769653303972 implements MigrationInterface {
name = "ThreadMembersIdx1769653303972";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE public.thread_members RENAME COLUMN member_id TO member_idx;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE public.thread_members RENAME COLUMN member_idx TO member_id;`);
}
}
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class UserProfileCustomisation1770062009127 implements MigrationInterface {
name = "UserProfileCustomisation1770062009127";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" ADD "avatar_decoration_data" text`);
await queryRunner.query(`ALTER TABLE "users" ADD "display_name_styles" text`);
await queryRunner.query(`ALTER TABLE "users" ADD "collectibles" text`);
await queryRunner.query(`ALTER TABLE "users" ADD "primary_guild" text`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "primary_guild"`);
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "collectibles"`);
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "display_name_styles"`);
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "avatar_decoration_data"`);
}
}
@@ -0,0 +1,32 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MemberProfileCustomisation1770079838835 implements MigrationInterface {
name = "MemberProfileCustomisation1770079838835";
public async up(queryRunner: QueryRunner): Promise<void> {
// just gonna let typeorm do its thing for once...
await queryRunner.query(`ALTER TABLE "thread_members" DROP CONSTRAINT "FK_606ac45e8756d3440c584477f4e"`);
await queryRunner.query(`DROP INDEX "public"."IDX_bde0970b6a26bdbd83508addd2"`);
await queryRunner.query(`ALTER TABLE "members" ADD "avatar_decoration_data" text`);
await queryRunner.query(`ALTER TABLE "members" ADD "display_name_styles" text`);
await queryRunner.query(`ALTER TABLE "members" ADD "collectibles" text`);
await queryRunner.query(`ALTER TABLE "guilds" ALTER COLUMN "channel_ordering" DROP DEFAULT`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_38d4f704373da3f0dc9b352ac9" ON "thread_members" ("id", "member_idx") `);
await queryRunner.query(
`ALTER TABLE "thread_members" ADD CONSTRAINT "FK_4721015b4e24ad29da55dbd2de0" FOREIGN KEY ("member_idx") REFERENCES "members"("index") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "thread_members" DROP CONSTRAINT "FK_4721015b4e24ad29da55dbd2de0"`);
await queryRunner.query(`DROP INDEX "public"."IDX_38d4f704373da3f0dc9b352ac9"`);
await queryRunner.query(`ALTER TABLE "guilds" ALTER COLUMN "channel_ordering" SET DEFAULT '[]'`);
await queryRunner.query(`ALTER TABLE "members" DROP COLUMN "collectibles"`);
await queryRunner.query(`ALTER TABLE "members" DROP COLUMN "display_name_styles"`);
await queryRunner.query(`ALTER TABLE "members" DROP COLUMN "avatar_decoration_data"`);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_bde0970b6a26bdbd83508addd2" ON "thread_members" ("id", "member_idx") `);
await queryRunner.query(
`ALTER TABLE "thread_members" ADD CONSTRAINT "FK_606ac45e8756d3440c584477f4e" FOREIGN KEY ("member_idx") REFERENCES "members"("index") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
}
@@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ForumTags1770308886650 implements MigrationInterface {
name = "ForumTags1770308886650";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "tags" ("id" character varying NOT NULL, "channel_id" character varying NOT NULL, "name" character varying NOT NULL, "moderated" boolean NOT NULL, "emoji_id" character varying NOT NULL, "emoji_name" character varying NOT NULL, CONSTRAINT "PK_e7dc17249a1148a1970748eda99" PRIMARY KEY ("id"))`,
);
await queryRunner.query(`ALTER TABLE "channels" ADD "applied_tags" text array`);
await queryRunner.query(
`ALTER TABLE "tags" ADD CONSTRAINT "FK_2e2df07f6dacc12e1932b361fe4" FOREIGN KEY ("channel_id") REFERENCES "channels"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "tags" DROP CONSTRAINT "FK_2e2df07f6dacc12e1932b361fe4"`);
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "applied_tags"`);
await queryRunner.query(`DROP TABLE "tags"`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class NullableTags1770310028511 implements MigrationInterface {
name = "NullableTags1770310028511";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "tags" ALTER COLUMN "emoji_id" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "tags" ALTER COLUMN "emoji_name" DROP NOT NULL`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "tags" ALTER COLUMN "emoji_name" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "tags" ALTER COLUMN "emoji_id" SET NOT NULL`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class GuildDiscoveryHoisting1770748070808 implements MigrationInterface {
name = "GuildDiscoveryHoisting1770748070808";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_weight" integer NOT NULL DEFAULT 0`);
await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_excluded" boolean NOT NULL DEFAULT FALSE`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_excluded"`);
await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_weight"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class SetRoleManagedDefault1771271159006 implements MigrationInterface {
name = "SetRoleManagedDefault1771271159006";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "roles" ALTER COLUMN "managed" SET DEFAULT false`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "roles" ALTER COLUMN "managed" DROP DEFAULT`);
}
}
@@ -0,0 +1,26 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MoreReadStateFields1771825341528 implements MigrationInterface {
name = "MoreReadStateFields1771825341528";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "read_states" DROP COLUMN "public_ack"`);
await queryRunner.query(`ALTER TABLE "read_states" ADD "last_acked_id" character varying`);
await queryRunner.query(`ALTER TABLE "read_states" ADD "badge_count" integer NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE "read_states" ADD "read_state_type" integer NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE "read_states" ADD "flags" integer NOT NULL DEFAULT '0'`);
await queryRunner.query(`ALTER TABLE "read_states" ALTER COLUMN "mention_count" SET DEFAULT '0'`);
await queryRunner.query(`UPDATE "read_states" SET "mention_count" = 0 WHERE "mention_count" IS NULL`);
await queryRunner.query(`ALTER TABLE "read_states" ALTER COLUMN "mention_count" SET NOT NULL`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "read_states" ALTER COLUMN "mention_count" DROP NOT NULL`);
await queryRunner.query(`ALTER TABLE "read_states" ALTER COLUMN "mention_count" DROP DEFAULT`);
await queryRunner.query(`ALTER TABLE "read_states" DROP COLUMN "flags"`);
await queryRunner.query(`ALTER TABLE "read_states" DROP COLUMN "read_state_type"`);
await queryRunner.query(`ALTER TABLE "read_states" DROP COLUMN "badge_count"`);
await queryRunner.query(`ALTER TABLE "read_states" DROP COLUMN "last_acked_id"`);
await queryRunner.query(`ALTER TABLE "read_states" ADD "public_ack" character varying`);
}
}
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class LastPinTimestampAsDate1771997061671 implements MigrationInterface {
name = "LastPinTimestampAsDate1771997061671";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "last_pin_timestamp"`);
await queryRunner.query(`ALTER TABLE "channels" ADD "last_pin_timestamp" TIMESTAMP WITH TIME ZONE`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "last_pin_timestamp"`);
await queryRunner.query(`ALTER TABLE "channels" ADD "last_pin_timestamp" integer`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class MemberFlags1772404321400 implements MigrationInterface {
name = "MemberFlags1772404321400";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "members" ADD "flags" integer NOT NULL DEFAULT '0'`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "members" DROP COLUMN "flags"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ChannelStatus1772404321401 implements MigrationInterface {
name = "ChannelStatus1772404321401";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channels" ADD "status" text NULL;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "channels" DROP COLUMN "status"`);
}
}
@@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class EmbedCacheCreatedAt1772404321402 implements MigrationInterface {
name = "EmbedCacheCreatedAt1772404321402";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "embed_cache" ADD "created_at" timestamp with time zone DEFAULT now();`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "embed_cache" DROP COLUMN "created_at"`);
}
}
@@ -0,0 +1,16 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class EmbedCacheCreatedAt1772404321403 implements MigrationInterface {
name = "EmbedCacheCreatedAt1772404321403";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "embed_cache" ALTER COLUMN "embed" DROP NOT NULL;`);
await queryRunner.query(`ALTER TABLE "embed_cache" ADD "embeds" text NULL;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "embed_cache" DROP COLUMN "embeds"`);
await queryRunner.query(`UPDATE "embed_cache" SET "embed" = '{}' WHERE "embed" IS NULL;`);
await queryRunner.query(`ALTER TABLE "embed_cache" ALTER COLUMN "embed" SET NOT NULL;`);
}
}
@@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class InstanceBansIndexes1772404321404 implements MigrationInterface {
name = "InstanceBansIndexes1772404321404";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE INDEX instance_bans_user_id_idx ON instance_bans USING HASH (user_id);`);
await queryRunner.query(`CREATE INDEX instance_bans_fingerprint_idx ON instance_bans USING HASH (fingerprint);`);
await queryRunner.query(`CREATE INDEX instance_bans_ip_address_idx ON instance_bans USING HASH (ip_address);`);
// sneaky, sneaky maintenance
await queryRunner.query(`REINDEX (VERBOSE) TABLE instance_bans;`);
// escape the transaction for a sec...
await queryRunner.query(`COMMIT;`);
await queryRunner.query(`VACUUM (FULL, ANALYZE, VERBOSE) instance_bans;`);
await queryRunner.query(`BEGIN;`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX instance_bans_user_id_idx;`);
await queryRunner.query(`DROP INDEX instance_bans_fingerprint_idx;`);
await queryRunner.query(`DROP INDEX instance_bans_ip_address_idx;`);
}
}
@@ -0,0 +1,14 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class ReconcileMigrationsAgain1776178641999 implements MigrationInterface {
name = "ReconcileMigrationsAgain1776178641999";
public async up(queryRunner: QueryRunner): Promise<void> {
// since we're no longer using syncDb()!
await queryRunner.query(`ALTER TABLE "webhooks" DROP CONSTRAINT IF EXISTS "fk_d64f38834fa676f6caa4786ddd6"`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
console.log("no.");
}
}
@@ -0,0 +1,54 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeys1776178642000 implements MigrationInterface {
name = "Int8PrimaryKeys1776178642000";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// simple changes only
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN id TYPE ${to} USING id::${to};`); // varchar
// applications -> separate migration
await queryRunner.query(`ALTER TABLE attachments ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE audit_logs ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE automod_rules ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE backup_codes ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE badges ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE bans ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE categories ALTER COLUMN id TYPE ${to} USING id::${to};`);
// channels -> separate migration
await queryRunner.query(`ALTER TABLE client_release ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE cloud_attachments ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE connected_accounts ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE embed_cache ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE emojis ALTER COLUMN id TYPE ${to} USING id::${to};`);
// guilds -> separate migration
// instance_bans -> separate migration
// messages -> separate migration
await queryRunner.query(`ALTER TABLE notes ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE rate_limits ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE read_states ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE recipients ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE relationships ALTER COLUMN id TYPE ${to} USING id::${to};`);
// roles -> separate migration
await queryRunner.query(`ALTER TABLE security_keys ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE security_settings ALTER COLUMN id TYPE ${to} USING id::${to};`);
// sticker_packs -> separate migration
// stickers -> separate migration
await queryRunner.query(`ALTER TABLE stream_sessions ALTER COLUMN id TYPE ${to} USING id::${to};`);
// streams -> separate migration
await queryRunner.query(`ALTER TABLE tags ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE team_members ALTER COLUMN id TYPE ${to} USING id::${to};`);
// teams -> separate migration
// templates -> separate migration
// users -> separate migration
await queryRunner.query(`ALTER TABLE voice_states ALTER COLUMN id TYPE ${to} USING id::${to};`);
// webhooks -> separate migration
}
}
@@ -0,0 +1,27 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysApplications1776178642001 implements MigrationInterface {
name = "Int8PrimaryKeysApplications1776178642001";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// applications
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_5d3ec1cb962de6488637fd779d6";`); // application_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN application_id TYPE ${to} USING application_id::${to};`);
// --> webhooks
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_c3e5305461931763b56aa905f1c";`); // application_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN application_id TYPE ${to} USING application_id::${to};`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE webhooks ADD CONSTRAINT "FK_c3e5305461931763b56aa905f1c" FOREIGN KEY (application_id) REFERENCES applications(id);`);
await queryRunner.query(`ALTER TABLE messages ADD CONSTRAINT "FK_5d3ec1cb962de6488637fd779d6" FOREIGN KEY (application_id) REFERENCES applications(id);`);
}
}
@@ -0,0 +1,93 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysChannels1776178642002 implements MigrationInterface {
name = "Int8PrimaryKeysChannels1776178642002";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// channels
// -> channels
await queryRunner.query(`ALTER TABLE channels DROP CONSTRAINT "FK_3274522d14af40540b1a883fc80";`); //parent_id
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN parent_id TYPE ${to} USING parent_id::${to}`);
// -> cloud_attachments
await queryRunner.query(`ALTER TABLE cloud_attachments DROP CONSTRAINT "FK_998d5fe91008ba5b09e1322104c";`); //channel_id
await queryRunner.query(`ALTER TABLE cloud_attachments ALTER COLUMN channel_id TYPE ${to} USING channel_id::${to}`);
// -> guilds
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0";`); //public_updates_channel_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN public_updates_channel_id TYPE ${to} USING public_updates_channel_id::${to}`);
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_95828668aa333460582e0ca6396";`); //rules_channel_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN rules_channel_id TYPE ${to} USING rules_channel_id::${to}`);
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_9d1d665379eefde7876a17afa99";`); //widget_channel_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN widget_channel_id TYPE ${to} USING widget_channel_id::${to}`);
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce";`); //system_channel_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN system_channel_id TYPE ${to} USING system_channel_id::${to}`);
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6";`); //afk_channel_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN afk_channel_id TYPE ${to} USING afk_channel_id::${to}`);
// -> invites
await queryRunner.query(`ALTER TABLE invites DROP CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6";`); //channel_id
await queryRunner.query(`ALTER TABLE invites ALTER COLUMN channel_id TYPE ${to} USING channel_id::${to}`);
// -> message_channel_mentions
await queryRunner.query(`ALTER TABLE message_channel_mentions DROP CONSTRAINT "FK_bdb8c09e1464cabf62105bf4b9d";`); //channelsId
await queryRunner.query(`ALTER TABLE message_channel_mentions ALTER COLUMN "channelsId" TYPE ${to} USING "channelsId"::${to}`);
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_86b9109b155eb70c0a2ca3b4b6d";`); //channel_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_bb3af7f695d50083e6523290d41";`); //thread_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN "thread_id" TYPE ${to} USING "thread_id"::${to}`);
// -> read_states
await queryRunner.query(`ALTER TABLE read_states DROP CONSTRAINT "FK_40da2fca4e0eaf7a23b5bfc5d34";`); //channel_id
await queryRunner.query(`ALTER TABLE read_states ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// -> recipients
await queryRunner.query(`ALTER TABLE recipients DROP CONSTRAINT "FK_2f18ee1ba667f233ae86c0ea60e";`); //channel_id
await queryRunner.query(`ALTER TABLE recipients ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// -> streams
await queryRunner.query(`ALTER TABLE streams DROP CONSTRAINT "FK_5101f0cded27ff0aae78fc4eed7";`); //channel_id
await queryRunner.query(`ALTER TABLE streams ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// -> tags
await queryRunner.query(`ALTER TABLE tags DROP CONSTRAINT "FK_2e2df07f6dacc12e1932b361fe4";`); //channel_id
await queryRunner.query(`ALTER TABLE tags ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// -> thread_members
await queryRunner.query(`ALTER TABLE thread_members DROP CONSTRAINT "FK_cf20e37d71b0e1bf1ab633861c8";`); //id
await queryRunner.query(`ALTER TABLE thread_members ALTER COLUMN "id" TYPE ${to} USING "id"::${to}`);
// -> voice_states
await queryRunner.query(`ALTER TABLE voice_states DROP CONSTRAINT "FK_9f8d389866b40b6657edd026dd4";`); //channel_id
await queryRunner.query(`ALTER TABLE voice_states ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// -> webhooks
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_4495b7032a33c6b8b605d030398";`); //source_channel_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN "source_channel_id" TYPE ${to} USING "source_channel_id"::${to}`);
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_df528cf77e82f8032230e7e37d8";`); //channel_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN "channel_id" TYPE ${to} USING "channel_id"::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE channels ADD CONSTRAINT "FK_3274522d14af40540b1a883fc80" FOREIGN KEY (parent_id) REFERENCES channels(id);`);
await queryRunner.query(
`ALTER TABLE cloud_attachments ADD CONSTRAINT "FK_998d5fe91008ba5b09e1322104c" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE SET NULL;`,
);
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY (public_updates_channel_id) REFERENCES channels(id);`);
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY (rules_channel_id) REFERENCES channels(id);`);
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY (widget_channel_id) REFERENCES channels(id);`);
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY (system_channel_id) REFERENCES channels(id);`);
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY (afk_channel_id) REFERENCES channels(id);`);
await queryRunner.query(`ALTER TABLE invites ADD CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(
`ALTER TABLE message_channel_mentions ADD CONSTRAINT "FK_bdb8c09e1464cabf62105bf4b9d" FOREIGN KEY ("channelsId") REFERENCES channels(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE messages ADD CONSTRAINT "FK_86b9109b155eb70c0a2ca3b4b6d" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE messages ADD CONSTRAINT "FK_bb3af7f695d50083e6523290d41" FOREIGN KEY (thread_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE read_states ADD CONSTRAINT "FK_40da2fca4e0eaf7a23b5bfc5d34" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE recipients ADD CONSTRAINT "FK_2f18ee1ba667f233ae86c0ea60e" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE streams ADD CONSTRAINT "FK_5101f0cded27ff0aae78fc4eed7" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE tags ADD CONSTRAINT "FK_2e2df07f6dacc12e1932b361fe4" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE thread_members ADD CONSTRAINT "FK_cf20e37d71b0e1bf1ab633861c8" FOREIGN KEY (id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE voice_states ADD CONSTRAINT "FK_9f8d389866b40b6657edd026dd4" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE webhooks ADD CONSTRAINT "FK_4495b7032a33c6b8b605d030398" FOREIGN KEY (source_channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE webhooks ADD CONSTRAINT "FK_df528cf77e82f8032230e7e37d8" FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE;`);
}
}
@@ -0,0 +1,74 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysGuilds1776178642003 implements MigrationInterface {
name = "Int8PrimaryKeysGuilds1776178642003";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// guilds
// -> applications
await queryRunner.query(`ALTER TABLE applications DROP CONSTRAINT "FK_e5bf78cdbbe9ba91062d74c5aba";`); //guild_id
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> bans
await queryRunner.query(`ALTER TABLE bans DROP CONSTRAINT "FK_9d3ab7dd180ebdd245cdb66ecad";`); //guild_id
await queryRunner.query(`ALTER TABLE bans ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> channels
await queryRunner.query(`ALTER TABLE channels DROP CONSTRAINT "FK_c253dafe5f3a03ec00cd8fb4581";`); //guild_id
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> emojis
await queryRunner.query(`ALTER TABLE emojis DROP CONSTRAINT "FK_4b988e0db89d94cebcf07f598cc";`); //guild_id
await queryRunner.query(`ALTER TABLE emojis ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> invites
await queryRunner.query(`ALTER TABLE invites DROP CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d";`); //guild_id
await queryRunner.query(`ALTER TABLE invites ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> members
await queryRunner.query(`ALTER TABLE members DROP CONSTRAINT "FK_16aceddd5b89825b8ed6029ad1c";`); //guild_id
await queryRunner.query(`ALTER TABLE members ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_b193588441b085352a4c0109423";`); //guild_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> roles
await queryRunner.query(`ALTER TABLE roles DROP CONSTRAINT "FK_c32c1ab1c4dc7dcb0278c4b1b8b";`); //guild_id
await queryRunner.query(`ALTER TABLE roles ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> stickers
await queryRunner.query(`ALTER TABLE stickers DROP CONSTRAINT "FK_193d551d852aca5347ef5c9f205";`); //guild_id
await queryRunner.query(`ALTER TABLE stickers ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> templates
await queryRunner.query(`ALTER TABLE templates DROP CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11";`); //source_guild_id
await queryRunner.query(`ALTER TABLE templates ALTER COLUMN source_guild_id TYPE ${to} USING source_guild_id::${to}`);
// -> voice_states
await queryRunner.query(`ALTER TABLE voice_states DROP CONSTRAINT "FK_03779ef216d4b0358470d9cb748";`); //guild_id
await queryRunner.query(`ALTER TABLE voice_states ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// -> webhooks
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_3a285f4f49c40e0706d3018bc9f";`); //source_guild_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN source_guild_id TYPE ${to} USING source_guild_id::${to}`);
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_487a7af59d189f744fe394368fc";`); //guild_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE public.messages ADD CONSTRAINT "FK_b193588441b085352a4c0109423" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.invites ADD CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(
`ALTER TABLE public.templates ADD CONSTRAINT "FK_445d00eaaea0e60a017a5ed0c11" FOREIGN KEY (source_guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE public.webhooks ADD CONSTRAINT "FK_3a285f4f49c40e0706d3018bc9f" FOREIGN KEY (source_guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.webhooks ADD CONSTRAINT "FK_487a7af59d189f744fe394368fc" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.members ADD CONSTRAINT "FK_16aceddd5b89825b8ed6029ad1c" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.roles ADD CONSTRAINT "FK_c32c1ab1c4dc7dcb0278c4b1b8b" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.stickers ADD CONSTRAINT "FK_193d551d852aca5347ef5c9f205" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.applications ADD CONSTRAINT "FK_e5bf78cdbbe9ba91062d74c5aba" FOREIGN KEY (guild_id) REFERENCES guilds(id);`);
await queryRunner.query(`ALTER TABLE public.voice_states ADD CONSTRAINT "FK_03779ef216d4b0358470d9cb748" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.bans ADD CONSTRAINT "FK_9d3ab7dd180ebdd245cdb66ecad" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.emojis ADD CONSTRAINT "FK_4b988e0db89d94cebcf07f598cc" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.channels ADD CONSTRAINT "FK_c253dafe5f3a03ec00cd8fb4581" FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
}
}
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysInstanceBans1776178642004 implements MigrationInterface {
name = "Int8PrimaryKeysInstanceBans1776178642004";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// instance_bans
// -> instance_bans
await queryRunner.query(`ALTER TABLE instance_bans DROP CONSTRAINT "FK_0b02d18d0d830f160c921192a30";`); //origin_instance_ban_id
await queryRunner.query(`ALTER TABLE instance_bans ALTER COLUMN origin_instance_ban_id TYPE ${to} USING origin_instance_ban_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE instance_bans ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE instance_bans ADD CONSTRAINT "FK_0b02d18d0d830f160c921192a30" FOREIGN KEY (origin_instance_ban_id) REFERENCES instance_bans(id) ON DELETE SET NULL;`,
);
}
}
@@ -0,0 +1,53 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysMessages1776178642005 implements MigrationInterface {
name = "Int8PrimaryKeysMessages1776178642005";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// messages
// -> message_role_mentions
await queryRunner.query(`ALTER TABLE message_role_mentions DROP CONSTRAINT "FK_a8242cf535337a490b0feaea0b4";`); //messagesId
await queryRunner.query(`ALTER TABLE message_role_mentions ALTER COLUMN "messagesId" TYPE ${to} USING "messagesId"::${to}`);
// -> message_channel_mentions
await queryRunner.query(`ALTER TABLE message_channel_mentions DROP CONSTRAINT "FK_2a27102ecd1d81b4582a4360921";`); //messagesId
await queryRunner.query(`ALTER TABLE message_channel_mentions ALTER COLUMN "messagesId" TYPE ${to} USING "messagesId"::${to}`);
// -> message_user_mentions
await queryRunner.query(`ALTER TABLE message_user_mentions DROP CONSTRAINT "FK_a343387fc560ef378760681c236";`); //messagesId
await queryRunner.query(`ALTER TABLE message_user_mentions ALTER COLUMN "messagesId" TYPE ${to} USING "messagesId"::${to}`);
// -> message_stickers
await queryRunner.query(`ALTER TABLE message_stickers DROP CONSTRAINT "FK_40bb6f23e7cc133292e92829d28";`); //messagesId
await queryRunner.query(`ALTER TABLE message_stickers ALTER COLUMN "messagesId" TYPE ${to} USING "messagesId"::${to}`);
// -> attachments
await queryRunner.query(`ALTER TABLE attachments DROP CONSTRAINT "FK_623e10eec51ada466c5038979e3";`); //message_id
await queryRunner.query(`ALTER TABLE attachments ALTER COLUMN message_id TYPE ${to} USING message_id::${to}`);
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174";`); //message_reference_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN message_reference_id TYPE ${to} USING message_reference_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE message_role_mentions ADD CONSTRAINT "FK_a8242cf535337a490b0feaea0b4" FOREIGN KEY ("messagesId") REFERENCES messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE message_channel_mentions ADD CONSTRAINT "FK_2a27102ecd1d81b4582a4360921" FOREIGN KEY ("messagesId") REFERENCES messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE message_user_mentions ADD CONSTRAINT "FK_a343387fc560ef378760681c236" FOREIGN KEY ("messagesId") REFERENCES messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE message_stickers ADD CONSTRAINT "FK_40bb6f23e7cc133292e92829d28" FOREIGN KEY ("messagesId") REFERENCES messages(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE attachments ADD CONSTRAINT "FK_623e10eec51ada466c5038979e3" FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE;`);
await queryRunner.query(
`ALTER TABLE messages ADD CONSTRAINT "FK_61a92bb65b302a76d9c1fcd3174" FOREIGN KEY (message_reference_id) REFERENCES messages(id) ON DELETE SET NULL;`,
);
}
}
@@ -0,0 +1,31 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysRoles1776178642006 implements MigrationInterface {
name = "Int8PrimaryKeysRoles1776178642006";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// roles
// -> message_role_mentions
await queryRunner.query(`ALTER TABLE message_role_mentions DROP CONSTRAINT "FK_29d63eb1a458200851bc37d074b";`); //rolesId
await queryRunner.query(`ALTER TABLE message_role_mentions ALTER COLUMN "rolesId" TYPE ${to} USING "rolesId"::${to}`);
// -> member_roles
await queryRunner.query(`ALTER TABLE member_roles DROP CONSTRAINT "FK_e9080e7a7997a0170026d5139c1";`); //role_id
await queryRunner.query(`ALTER TABLE member_roles ALTER COLUMN "role_id" TYPE ${to} USING "role_id"::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE roles ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE public.message_role_mentions ADD CONSTRAINT "FK_29d63eb1a458200851bc37d074b" FOREIGN KEY ("rolesId") REFERENCES roles(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(
`ALTER TABLE public.member_roles ADD CONSTRAINT "FK_e9080e7a7997a0170026d5139c1" FOREIGN KEY (role_id) REFERENCES roles(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
}
}
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysStickerPacks1776178642007 implements MigrationInterface {
name = "Int8PrimaryKeysStickerPacks1776178642007";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// sticker_packs
// -> stickers
await queryRunner.query(`ALTER TABLE stickers DROP CONSTRAINT "FK_e7cfa5cefa6661b3fb8fda8ce69";`); //pack_id
await queryRunner.query(`ALTER TABLE stickers ALTER COLUMN pack_id TYPE ${to} USING pack_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE sticker_packs ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE public.stickers ADD CONSTRAINT "FK_e7cfa5cefa6661b3fb8fda8ce69" FOREIGN KEY (pack_id) REFERENCES sticker_packs(id) ON DELETE CASCADE;`,
);
}
}
@@ -0,0 +1,29 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysStickers1776178642008 implements MigrationInterface {
name = "Int8PrimaryKeysStickers1776178642008";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// stickers
// -> message_stickers
await queryRunner.query(`ALTER TABLE message_stickers DROP CONSTRAINT "FK_e22a70819d07659c7a71c112a1f";`); //stickersId
await queryRunner.query(`ALTER TABLE message_stickers ALTER COLUMN "stickersId" TYPE ${to} USING "stickersId"::${to}`);
// -> sticker_packs
await queryRunner.query(`ALTER TABLE sticker_packs DROP CONSTRAINT "FK_448fafba4355ee1c837bbc865f1";`); //coverStickerId
await queryRunner.query(`ALTER TABLE sticker_packs ALTER COLUMN "coverStickerId" TYPE ${to} USING "coverStickerId"::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE stickers ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE public.message_stickers ADD CONSTRAINT "FK_e22a70819d07659c7a71c112a1f" FOREIGN KEY ("stickersId") REFERENCES stickers(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.sticker_packs ADD CONSTRAINT "FK_448fafba4355ee1c837bbc865f1" FOREIGN KEY ("coverStickerId") REFERENCES stickers (id);`);
}
}
@@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysStreams1776178642009 implements MigrationInterface {
name = "Int8PrimaryKeysStreams1776178642009";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// streams
// -> stream_sessions
await queryRunner.query(`ALTER TABLE stream_sessions DROP CONSTRAINT "FK_8b5a028a34dae9ee54af37c9c32";`); //stream_id
await queryRunner.query(`ALTER TABLE stream_sessions ALTER COLUMN stream_id TYPE ${to} USING stream_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE streams ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE public.stream_sessions ADD CONSTRAINT "FK_8b5a028a34dae9ee54af37c9c32" FOREIGN KEY (stream_id) REFERENCES streams(id) ON DELETE CASCADE;`,
);
}
}
@@ -0,0 +1,27 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysTeams1776178642010 implements MigrationInterface {
name = "Int8PrimaryKeysTeams1776178642010";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// teams
// -> applications
await queryRunner.query(`ALTER TABLE applications DROP CONSTRAINT "FK_a36ed02953077f408d0f3ebc424";`); //team_id
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN team_id TYPE ${to} USING team_id::${to}`);
// -> team_members
await queryRunner.query(`ALTER TABLE team_members DROP CONSTRAINT "FK_fdad7d5768277e60c40e01cdcea";`); //team_id
await queryRunner.query(`ALTER TABLE team_members ALTER COLUMN team_id TYPE ${to} USING team_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE teams ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE public.applications ADD CONSTRAINT "FK_a36ed02953077f408d0f3ebc424" FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.team_members ADD CONSTRAINT "FK_fdad7d5768277e60c40e01cdcea" FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE;`);
}
}
@@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysTemplates1776178642011 implements MigrationInterface {
name = "Int8PrimaryKeysTemplates1776178642011";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// templates
// -> guilds
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_e2a2f873a64a5cf62526de42325";`); //template_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN template_id TYPE ${to} USING template_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE templates ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE public.guilds ADD CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY (template_id) REFERENCES templates(id);`);
}
}
@@ -0,0 +1,166 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysUsers1776178642012 implements MigrationInterface {
name = "Int8PrimaryKeysUsers1776178642012";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// users
// -> applications
await queryRunner.query(`ALTER TABLE applications DROP CONSTRAINT "FK_2ce5a55796fe4c2f77ece57a647";`); //bot_user_id
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN bot_user_id TYPE ${to} USING bot_user_id::${to}`);
await queryRunner.query(`ALTER TABLE applications DROP CONSTRAINT "FK_e57508958bf92b9d9d25231b5e8";`); //owner_id
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN owner_id TYPE ${to} USING owner_id::${to}`);
// -> audit_logs
await queryRunner.query(`ALTER TABLE audit_logs DROP CONSTRAINT "FK_3cd01cd3ae7aab010310d96ac8e";`); //target_id
await queryRunner.query(`ALTER TABLE audit_logs ALTER COLUMN target_id TYPE ${to} USING target_id::${to}`);
await queryRunner.query(`ALTER TABLE audit_logs DROP CONSTRAINT "FK_bd2726fd31b35443f2245b93ba0";`); //user_id
await queryRunner.query(`ALTER TABLE audit_logs ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> automod_rules
await queryRunner.query(`ALTER TABLE automod_rules DROP CONSTRAINT "FK_12d3d60b961393d310429c062b7";`); //creator_id
await queryRunner.query(`ALTER TABLE automod_rules ALTER COLUMN creator_id TYPE ${to} USING creator_id::${to}`);
// -> backup_codes
await queryRunner.query(`ALTER TABLE backup_codes DROP CONSTRAINT "FK_70066ea80d2f4b871beda32633b";`); //user_id
await queryRunner.query(`ALTER TABLE backup_codes ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> bans
await queryRunner.query(`ALTER TABLE bans DROP CONSTRAINT "FK_07ad88c86d1f290d46748410d58";`); //executor_id
await queryRunner.query(`ALTER TABLE bans ALTER COLUMN executor_id TYPE ${to} USING executor_id::${to}`);
await queryRunner.query(`ALTER TABLE bans DROP CONSTRAINT "FK_5999e8e449f80a236ff72023559";`); //user_id
await queryRunner.query(`ALTER TABLE bans ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> channels
await queryRunner.query(`ALTER TABLE channels DROP CONSTRAINT "FK_3873ed438575cce703ecff4fc7b";`); //owner_id
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN owner_id TYPE ${to} USING owner_id::${to}`);
// -> cloud_attachments
await queryRunner.query(`ALTER TABLE cloud_attachments DROP CONSTRAINT "FK_8bf8cc8767e48cb482ff644fce6";`); //user_id
await queryRunner.query(`ALTER TABLE cloud_attachments ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> connected_accounts
await queryRunner.query(`ALTER TABLE connected_accounts DROP CONSTRAINT "FK_f47244225a6a1eac04a3463dd90";`); //user_id
await queryRunner.query(`ALTER TABLE connected_accounts ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> emojis
await queryRunner.query(`ALTER TABLE emojis DROP CONSTRAINT "FK_fa7ddd5f9a214e28ce596548421";`); //user_id
await queryRunner.query(`ALTER TABLE emojis ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> guilds
await queryRunner.query(`ALTER TABLE guilds DROP CONSTRAINT "FK_fc1a451727e3643ca572a3bb394";`); //owner_id
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN owner_id TYPE ${to} USING owner_id::${to}`);
// -> invites
await queryRunner.query(`ALTER TABLE invites DROP CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59";`); //target_user_id
await queryRunner.query(`ALTER TABLE invites ALTER COLUMN target_user_id TYPE ${to} USING target_user_id::${to}`);
await queryRunner.query(`ALTER TABLE invites DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f";`); //inviter_id
await queryRunner.query(`ALTER TABLE invites ALTER COLUMN inviter_id TYPE ${to} USING inviter_id::${to}`);
// -> members
await queryRunner.query(`ALTER TABLE members DROP CONSTRAINT "FK_28b53062261b996d9c99fa12404";`); //id
await queryRunner.query(`ALTER TABLE members ALTER COLUMN id TYPE ${to} USING id::${to}`);
// -> message_user_mentions
await queryRunner.query(`ALTER TABLE message_user_mentions DROP CONSTRAINT "FK_b831eb18ceebd28976239b1e2f8";`); //usersId
await queryRunner.query(`ALTER TABLE message_user_mentions ALTER COLUMN "usersId" TYPE ${to} USING "usersId"::${to}`);
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_05535bc695e9f7ee104616459d3";`); //author_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN author_id TYPE ${to} USING author_id::${to}`);
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_b0525304f2262b7014245351c76";`); //member_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN member_id TYPE ${to} USING member_id::${to}`);
// -> notes
await queryRunner.query(`ALTER TABLE notes DROP CONSTRAINT "FK_23e08e5b4481711d573e1abecdc";`); //target_id
await queryRunner.query(`ALTER TABLE notes ALTER COLUMN target_id TYPE ${to} USING target_id::${to}`);
await queryRunner.query(`ALTER TABLE notes DROP CONSTRAINT "FK_f9e103f8ae67cb1787063597925";`); //owner_id
await queryRunner.query(`ALTER TABLE notes ALTER COLUMN owner_id TYPE ${to} USING owner_id::${to}`);
// -> read_states
await queryRunner.query(`ALTER TABLE read_states DROP CONSTRAINT "FK_195f92e4dd1254a4e348c043763";`); //user_id
await queryRunner.query(`ALTER TABLE read_states ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> recipients
await queryRunner.query(`ALTER TABLE recipients DROP CONSTRAINT "FK_6157e8b6ba4e6e3089616481fe2";`); //user_id
await queryRunner.query(`ALTER TABLE recipients ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> relationships
await queryRunner.query(`ALTER TABLE relationships DROP CONSTRAINT "FK_9af4194bab1250b1c584ae4f1d7";`); //from_id
await queryRunner.query(`ALTER TABLE relationships ALTER COLUMN from_id TYPE ${to} USING from_id::${to}`);
await queryRunner.query(`ALTER TABLE relationships DROP CONSTRAINT "FK_9c7f6b98a9843b76dce1b0c878b";`); //to_id
await queryRunner.query(`ALTER TABLE relationships ALTER COLUMN to_id TYPE ${to} USING to_id::${to}`);
// -> security_keys
await queryRunner.query(`ALTER TABLE security_keys DROP CONSTRAINT "FK_24c97d0771cafedce6d7163eaad";`); //user_id
await queryRunner.query(`ALTER TABLE security_keys ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> sessions
await queryRunner.query(`ALTER TABLE sessions DROP CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19";`); //user_id
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> stickers
await queryRunner.query(`ALTER TABLE stickers DROP CONSTRAINT "FK_8f4ee73f2bb2325ff980502e158";`); //user_id
await queryRunner.query(`ALTER TABLE stickers ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> stream_sessions
await queryRunner.query(`ALTER TABLE stream_sessions DROP CONSTRAINT "FK_13ae5c29aff4d0890c54179511a";`); //user_id
await queryRunner.query(`ALTER TABLE stream_sessions ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> streams
await queryRunner.query(`ALTER TABLE streams DROP CONSTRAINT "FK_1b566f9b54d1cda271da53ac82f";`); //owner_id
await queryRunner.query(`ALTER TABLE streams ALTER COLUMN owner_id TYPE ${to} USING owner_id::${to}`);
// -> team_members
await queryRunner.query(`ALTER TABLE team_members DROP CONSTRAINT "FK_c2bf4967c8c2a6b845dadfbf3d4";`); //user_id
await queryRunner.query(`ALTER TABLE team_members ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> teams
await queryRunner.query(`ALTER TABLE teams DROP CONSTRAINT "FK_13f00abf7cb6096c43ecaf8c108";`); //owner_user_id
await queryRunner.query(`ALTER TABLE teams ALTER COLUMN owner_user_id TYPE ${to} USING owner_user_id::${to}`);
// -> templates
await queryRunner.query(`ALTER TABLE templates DROP CONSTRAINT "FK_d7374b7f8f5fbfdececa4fb62e1";`); //creator_id
await queryRunner.query(`ALTER TABLE templates ALTER COLUMN creator_id TYPE ${to} USING creator_id::${to}`);
// -> user_settings_protos
await queryRunner.query(`ALTER TABLE user_settings_protos DROP CONSTRAINT "FK_8ff3d1961a48b693810c9f99853";`); //user_id
await queryRunner.query(`ALTER TABLE user_settings_protos ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> voice_states
await queryRunner.query(`ALTER TABLE voice_states DROP CONSTRAINT "FK_5fe1d5f931a67e85039c640001b";`); //user_id
await queryRunner.query(`ALTER TABLE voice_states ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// -> webhooks
await queryRunner.query(`ALTER TABLE webhooks DROP CONSTRAINT "FK_0d523f6f997c86e052c49b1455f";`); //user_id
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE users ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(
`ALTER TABLE public.applications ADD CONSTRAINT "FK_2ce5a55796fe4c2f77ece57a647" FOREIGN KEY (bot_user_id) REFERENCES users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.applications ADD CONSTRAINT "FK_e57508958bf92b9d9d25231b5e8" FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.audit_logs ADD CONSTRAINT "FK_3cd01cd3ae7aab010310d96ac8e" FOREIGN KEY (target_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.audit_logs ADD CONSTRAINT "FK_bd2726fd31b35443f2245b93ba0" FOREIGN KEY (user_id) REFERENCES users(id);`);
await queryRunner.query(
`ALTER TABLE public.automod_rules ADD CONSTRAINT "FK_12d3d60b961393d310429c062b7" FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.backup_codes ADD CONSTRAINT "FK_70066ea80d2f4b871beda32633b" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.bans ADD CONSTRAINT "FK_07ad88c86d1f290d46748410d58" FOREIGN KEY (executor_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.bans ADD CONSTRAINT "FK_5999e8e449f80a236ff72023559" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.channels ADD CONSTRAINT "FK_3873ed438575cce703ecff4fc7b" FOREIGN KEY (owner_id) REFERENCES users(id);`);
await queryRunner.query(
`ALTER TABLE public.cloud_attachments ADD CONSTRAINT "FK_8bf8cc8767e48cb482ff644fce6" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;`,
);
await queryRunner.query(
`ALTER TABLE public.connected_accounts ADD CONSTRAINT "FK_f47244225a6a1eac04a3463dd90" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.emojis ADD CONSTRAINT "FK_fa7ddd5f9a214e28ce596548421" FOREIGN KEY (user_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.guilds ADD CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.invites ADD CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY (target_user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.invites ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY (inviter_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.members ADD CONSTRAINT "FK_28b53062261b996d9c99fa12404" FOREIGN KEY (id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(
`ALTER TABLE public.message_user_mentions ADD CONSTRAINT "FK_b831eb18ceebd28976239b1e2f8" FOREIGN KEY ("usersId") REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE public.messages ADD CONSTRAINT "FK_05535bc695e9f7ee104616459d3" FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.messages ADD CONSTRAINT "FK_b0525304f2262b7014245351c76" FOREIGN KEY (member_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.notes ADD CONSTRAINT "FK_23e08e5b4481711d573e1abecdc" FOREIGN KEY (target_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.notes ADD CONSTRAINT "FK_f9e103f8ae67cb1787063597925" FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.read_states ADD CONSTRAINT "FK_195f92e4dd1254a4e348c043763" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.recipients ADD CONSTRAINT "FK_6157e8b6ba4e6e3089616481fe2" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.relationships ADD CONSTRAINT "FK_9af4194bab1250b1c584ae4f1d7" FOREIGN KEY (from_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.relationships ADD CONSTRAINT "FK_9c7f6b98a9843b76dce1b0c878b" FOREIGN KEY (to_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.security_keys ADD CONSTRAINT "FK_24c97d0771cafedce6d7163eaad" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.sessions ADD CONSTRAINT "FK_085d540d9f418cfbdc7bd55bb19" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.stickers ADD CONSTRAINT "FK_8f4ee73f2bb2325ff980502e158" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.stream_sessions ADD CONSTRAINT "FK_13ae5c29aff4d0890c54179511a" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.streams ADD CONSTRAINT "FK_1b566f9b54d1cda271da53ac82f" FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.team_members ADD CONSTRAINT "FK_c2bf4967c8c2a6b845dadfbf3d4" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.teams ADD CONSTRAINT "FK_13f00abf7cb6096c43ecaf8c108" FOREIGN KEY (owner_user_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.templates ADD CONSTRAINT "FK_d7374b7f8f5fbfdececa4fb62e1" FOREIGN KEY (creator_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.user_settings_protos ADD CONSTRAINT "FK_8ff3d1961a48b693810c9f99853" FOREIGN KEY (user_id) REFERENCES users(id);`);
await queryRunner.query(`ALTER TABLE public.voice_states ADD CONSTRAINT "FK_5fe1d5f931a67e85039c640001b" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE public.webhooks ADD CONSTRAINT "FK_0d523f6f997c86e052c49b1455f" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;`);
}
}
@@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8PrimaryKeysWebhooks1776178642013 implements MigrationInterface {
name = "Int8PrimaryKeysWebhooks1776178642013";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
// webhooks
// -> messages
await queryRunner.query(`ALTER TABLE messages DROP CONSTRAINT "FK_f83c04bcf1df4e5c0e7a52ed348";`); //webhook_id
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN webhook_id TYPE ${to} USING webhook_id::${to}`);
// and finally, cleanup
await queryRunner.query(`ALTER TABLE webhooks ALTER COLUMN id TYPE ${to} USING id::${to};`);
await queryRunner.query(`ALTER TABLE public.messages ADD CONSTRAINT "FK_f83c04bcf1df4e5c0e7a52ed348" FOREIGN KEY (webhook_id) REFERENCES webhooks(id);`);
}
}
@@ -0,0 +1,85 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class JsonbForJsonColumns1776204936000 implements MigrationInterface {
name = "JsonbForJsonColumns1776204936000";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "jsonb");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN options SET DEFAULT '[]'::jsonb;`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN contexts TYPE ${to} USING contexts::${to};`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN description_localizations TYPE ${to} USING description_localizations::${to};`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN integration_types TYPE ${to} USING integration_types::${to};`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN options TYPE ${to} USING options::${to};`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN permissions TYPE ${to} USING permissions::${to};`);
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN "type" TYPE ${to} USING "type"::${to};`);
await queryRunner.query(`ALTER TABLE applications ALTER COLUMN install_params TYPE ${to} USING install_params::${to};`);
await queryRunner.query(`ALTER TABLE audit_logs ALTER COLUMN changes TYPE ${to} USING changes::${to};`);
await queryRunner.query(`ALTER TABLE audit_logs ALTER COLUMN options TYPE ${to} USING options::${to};`);
await queryRunner.query(`ALTER TABLE automod_rules ALTER COLUMN actions TYPE ${to} USING actions::${to};`);
await queryRunner.query(`ALTER TABLE automod_rules ALTER COLUMN trigger_metadata TYPE ${to} USING trigger_metadata::${to};`);
await queryRunner.query(`ALTER TABLE categories ALTER COLUMN localizations TYPE ${to} USING localizations::${to};`);
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN permission_overwrites TYPE ${to} USING permission_overwrites::${to};`);
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN thread_metadata TYPE ${to} USING thread_metadata::${to};`);
await queryRunner.query(`ALTER TABLE connected_accounts ALTER COLUMN metadata TYPE ${to} USING metadata::${to};`);
await queryRunner.query(`ALTER TABLE connected_accounts ALTER COLUMN token_data TYPE ${to} USING token_data::${to};`);
await queryRunner.query(`ALTER TABLE embed_cache ALTER COLUMN embed TYPE ${to} USING embed::${to};`);
await queryRunner.query(`ALTER TABLE embed_cache ALTER COLUMN embeds TYPE ${to} USING embeds::${to};`);
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN welcome_screen TYPE ${to} USING welcome_screen::${to};`);
await queryRunner.query(`ALTER TABLE members ALTER COLUMN avatar_decoration_data TYPE ${to} USING avatar_decoration_data::${to};`);
await queryRunner.query(`ALTER TABLE members ALTER COLUMN collectibles TYPE ${to} USING collectibles::${to};`);
await queryRunner.query(`ALTER TABLE members ALTER COLUMN display_name_styles TYPE ${to} USING display_name_styles::${to};`);
await queryRunner.query(`ALTER TABLE members ALTER COLUMN settings TYPE ${to} USING settings::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN message_snapshots SET DEFAULT '[]'::jsonb;`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN activity TYPE ${to} USING activity::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN components TYPE ${to} USING components::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN embeds TYPE ${to} USING embeds::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN interaction TYPE ${to} USING interaction::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN interaction_metadata TYPE ${to} USING interaction_metadata::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN message_reference TYPE ${to} USING message_reference::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN message_snapshots TYPE ${to} USING message_snapshots::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN poll TYPE ${to} USING poll::${to};`);
await queryRunner.query(`ALTER TABLE messages ALTER COLUMN reactions TYPE ${to} USING reactions::${to};`);
await queryRunner.query(`ALTER TABLE roles ALTER COLUMN colors TYPE ${to} USING colors::${to};`);
await queryRunner.query(`ALTER TABLE roles ALTER COLUMN tags TYPE ${to} USING tags::${to};`);
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN activities SET DEFAULT '[]'::jsonb;`);
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN activities TYPE ${to} USING activities::${to};`);
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN client_info TYPE ${to} USING client_info::${to};`);
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN client_status TYPE ${to} USING client_status::${to};`);
await queryRunner.query(`ALTER TABLE sessions ALTER COLUMN last_seen_location_info TYPE ${to} USING last_seen_location_info::${to};`);
await queryRunner.query(`ALTER TABLE templates ALTER COLUMN serialized_source_guild TYPE ${to} USING serialized_source_guild::${to};`);
await queryRunner.query(`ALTER TABLE thread_members ALTER COLUMN mute_config TYPE ${to} USING mute_config::${to};`);
await queryRunner.query(`ALTER TABLE user_settings ALTER COLUMN custom_status TYPE ${to} USING custom_status::${to};`);
await queryRunner.query(`ALTER TABLE user_settings ALTER COLUMN friend_source_flags TYPE ${to} USING friend_source_flags::${to};`);
await queryRunner.query(`ALTER TABLE user_settings ALTER COLUMN guild_folders TYPE ${to} USING guild_folders::${to};`);
await queryRunner.query(`ALTER TABLE user_settings ALTER COLUMN guild_positions TYPE ${to} USING guild_positions::${to};`);
await queryRunner.query(`ALTER TABLE user_settings ALTER COLUMN restricted_guilds TYPE ${to} USING restricted_guilds::${to};`);
await queryRunner.query(`ALTER TABLE users ALTER COLUMN avatar_decoration_data TYPE ${to} USING avatar_decoration_data::${to};`);
await queryRunner.query(`ALTER TABLE users ALTER COLUMN collectibles TYPE ${to} USING collectibles::${to};`);
await queryRunner.query(`ALTER TABLE users ALTER COLUMN data TYPE ${to} USING data::${to};`);
await queryRunner.query(`ALTER TABLE users ALTER COLUMN display_name_styles TYPE ${to} USING display_name_styles::${to};`);
await queryRunner.query(`ALTER TABLE users ALTER COLUMN primary_guild TYPE ${to} USING primary_guild::${to};`);
}
}
@@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class DontStoreAttachmentUrls1776270346000 implements MigrationInterface {
name = "DontStoreAttachmentUrls1776270346000";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "jsonb");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
await queryRunner.query(`ALTER TABLE attachments ADD channel_id int8 NULL;`);
await queryRunner.query(`ALTER TABLE attachments ADD CONSTRAINT attachments_channels_fk FOREIGN KEY (channel_id) REFERENCES public.channels(id) ON DELETE CASCADE;`);
await queryRunner.query(`UPDATE attachments att SET channel_id = (SELECT channel_id FROM messages WHERE id = att.message_id) WHERE message_id IS NOT NULL;`);
await queryRunner.query(`ALTER TABLE attachments DROP COLUMN url;`);
await queryRunner.query(`ALTER TABLE attachments DROP COLUMN proxy_url;`);
}
}
@@ -0,0 +1,39 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class Int8Fixes1776283923000 implements MigrationInterface {
name = "Int8Fixes1776283923000";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
await this.convertPks(queryRunner, "varchar");
}
private async convertPks(queryRunner: QueryRunner, to: string) {
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN "version" SET DEFAULT 0::int8;`);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN application_id TYPE ${to} USING application_id::${to}`);
// missing relation
await queryRunner.query(
`ALTER TABLE application_commands ADD CONSTRAINT application_commands_applications_fk FOREIGN KEY (application_id) REFERENCES applications(id) ON DELETE CASCADE;`,
);
await queryRunner.query(`ALTER TABLE application_commands ALTER COLUMN version TYPE ${to} USING version::${to}`);
await queryRunner.query(`ALTER TABLE automod_rules ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
// missing relation
await queryRunner.query(`ALTER TABLE automod_rules ADD CONSTRAINT automod_rules_guilds_fk FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE;`);
await queryRunner.query(`ALTER TABLE channels ALTER COLUMN last_message_id TYPE ${to} USING last_message_id::${to}`);
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN primary_category_id TYPE ${to} USING primary_category_id::${to}`);
// missing relation
await queryRunner.query(`ALTER TABLE guilds ADD CONSTRAINT guilds_categories_fk FOREIGN KEY (primary_category_id) REFERENCES categories(id) ON DELETE SET NULL;`);
await queryRunner.query(`ALTER TABLE instance_bans ALTER COLUMN user_id TYPE ${to} USING user_id::${to}`);
await queryRunner.query(`ALTER TABLE members ALTER COLUMN last_message_id TYPE ${to} USING last_message_id::${to}`);
// oops
await queryRunner.query(`UPDATE read_states SET last_message_id = NULL WHERE last_message_id = 'null' OR last_message_id = 'undefined' OR last_message_id ~ 'fake';`);
await queryRunner.query(`ALTER TABLE read_states ALTER COLUMN last_message_id TYPE ${to} USING last_message_id::${to}`);
await queryRunner.query(`ALTER TABLE read_states ALTER COLUMN last_acked_id TYPE ${to} USING last_acked_id::${to}`);
await queryRunner.query(`ALTER TABLE security_settings ALTER COLUMN guild_id TYPE ${to} USING guild_id::${to}`);
await queryRunner.query(`ALTER TABLE security_settings ALTER COLUMN channel_id TYPE ${to} USING channel_id::${to}`);
await queryRunner.query(`ALTER TABLE tags ALTER COLUMN emoji_id TYPE ${to} USING emoji_id::${to}`);
}
}
@@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class GuildChannelOrderingAsArray1776450647000 implements MigrationInterface {
name = "GuildChannelOrderingAsArray1776450647000";
public async up(queryRunner: QueryRunner): Promise<void> {
// spacebar was randomly adding json data into CSV values, unwrap them
await queryRunner.query(`UPDATE guilds SET channel_ordering = REPLACE(channel_ordering, '"', '') WHERE channel_ordering ~ '"';`);
await queryRunner.query(`UPDATE guilds SET channel_ordering = REPLACE(channel_ordering, '[', '') WHERE channel_ordering ~ '\\[';`);
await queryRunner.query(`UPDATE guilds SET channel_ordering = REPLACE(channel_ordering, ']', '') WHERE channel_ordering ~ '\\]';`);
await queryRunner.query(`ALTER TABLE guilds ALTER COLUMN channel_ordering TYPE int8[] USING string_to_array(channel_ordering, ',')::int8[];`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
console.log(`Migration ${this.name}.down() not implemented`);
}
}
@@ -0,0 +1,41 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class AllSimpleArraysToPgArrays1776450647001 implements MigrationInterface {
name = "AllSimpleArraysToPgArrays1776450647001";
public async up(queryRunner: QueryRunner): Promise<void> {
await this.cleanAndConvertToArray(queryRunner, "applications", "redirect_uris", "varchar");
await this.cleanAndConvertToArray(queryRunner, "applications", "tags", "varchar");
// await this.cleanAndConvertToArray(queryRunner, "applications", "rpc_origins", "varchar");
await this.cleanAndConvertToArray(queryRunner, "automod_rules", "exempt_channels", "int8");
await this.cleanAndConvertToArray(queryRunner, "automod_rules", "exempt_roles", "int8");
await this.cleanAndConvertToArray(queryRunner, "connected_accounts", "integrations", "varchar");
await this.cleanAndConvertToArray(queryRunner, "emojis", "roles", "int8");
await this.cleanAndConvertToArray(queryRunner, "emojis", "groups", "int8");
await this.cleanAndConvertToArray(queryRunner, "guilds", "features", "varchar");
await this.cleanAndConvertToArray(queryRunner, "members", "theme_colors", "int4");
await this.cleanAndConvertToArray(queryRunner, "team_members", "permissions", "varchar");
await this.cleanAndConvertToArray(queryRunner, "users", "theme_colors", "int4");
await this.cleanAndConvertToArray(queryRunner, "users", "fingerprints", "varchar");
await this.cleanAndConvertToArray(queryRunner, "users", "badge_ids", "int8");
}
public async down(queryRunner: QueryRunner): Promise<void> {
console.log(`Migration ${this.name}.down() not implemented`);
}
private async cleanAndConvertToArray(queryRunner: QueryRunner, table: string, column: string, type: string) {
// spacebar was randomly adding json data into CSV values, unwrap them
await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, '"', '') WHERE ${column} ~ '"';`);
await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, '[', '') WHERE ${column} ~ '\\[';`);
await queryRunner.query(`UPDATE ${table} SET ${column} = REPLACE(${column}, ']', '') WHERE ${column} ~ '\\]';`);
await queryRunner.query(`ALTER TABLE ${table} ALTER COLUMN ${column} TYPE ${type}[] USING string_to_array(${column}, ',')::${type}[];`);
}
}