summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--util/src/entities/Invite.ts13
-rw-r--r--util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts56
-rw-r--r--util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts26
-rw-r--r--util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts246
4 files changed, 336 insertions, 5 deletions
diff --git a/util/src/entities/Invite.ts b/util/src/entities/Invite.ts
index b672caf7..1e0ebe52 100644
--- a/util/src/entities/Invite.ts
+++ b/util/src/entities/Invite.ts
@@ -4,19 +4,20 @@ import { BaseClassWithoutId } from "./BaseClass";
 import { Channel } from "./Channel";
 import { Guild } from "./Guild";
 import { User } from "./User";
+import { random } from "@fosscord/api";
 
 export const PublicInviteRelation = ["inviter", "guild", "channel"];
 
 @Entity("invites")
 export class Invite extends BaseClassWithoutId {
 	@PrimaryColumn()
-	code: string;
+	code: string = random();
 
 	@Column()
-	temporary: boolean;
+	temporary: boolean = true;
 
 	@Column()
-	uses: number;
+	uses: number = 0;
 
 	@Column()
 	max_uses: number;
@@ -25,7 +26,7 @@ export class Invite extends BaseClassWithoutId {
 	max_age: number;
 
 	@Column()
-	created_at: Date;
+	created_at: Date = new Date();
 
 	@Column()
 	expires_at: Date;
@@ -55,7 +56,9 @@ export class Invite extends BaseClassWithoutId {
 	inviter_id: string;
 
 	@JoinColumn({ name: "inviter_id" })
-	@ManyToOne(() => User)
+	@ManyToOne(() => User, {
+		onDelete: "CASCADE"
+	})
 	inviter: User;
 
 	@Column({ nullable: true })
diff --git a/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts b/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts
new file mode 100644
index 00000000..8374eafb
--- /dev/null
+++ b/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts
@@ -0,0 +1,56 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class InvitersAreDeletable1660416072362 implements MigrationInterface {
+    name = 'InvitersAreDeletable1660416072362'
+
+    public async up(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\`
+        `);
+        await queryRunner.query(`
+            DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\`
+        `);
+        await queryRunner.query(`
+            CREATE TABLE \`plugin_config\` (
+                \`key\` varchar(255) NOT NULL,
+                \`value\` text NULL,
+                PRIMARY KEY (\`key\`)
+            ) ENGINE = InnoDB
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`channels\`
+            ADD \`flags\` int NULL
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`channels\`
+            ADD \`default_thread_rate_limit_per_user\` int NULL
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`invites\`
+            ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION
+        `);
+    }
+
+    public async down(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\`
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\`
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`channels\` DROP COLUMN \`flags\`
+        `);
+        await queryRunner.query(`
+            DROP TABLE \`plugin_config\`
+        `);
+        await queryRunner.query(`
+            CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`)
+        `);
+        await queryRunner.query(`
+            ALTER TABLE \`invites\`
+            ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION
+        `);
+    }
+
+}
diff --git a/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts b/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts
new file mode 100644
index 00000000..e6101318
--- /dev/null
+++ b/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts
@@ -0,0 +1,26 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class InvitersAreDeletable1660416055566 implements MigrationInterface {
+    name = 'InvitersAreDeletable1660416055566'
+
+    public async up(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f"
+        `);
+        await queryRunner.query(`
+            ALTER TABLE "invites"
+            ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION
+        `);
+    }
+
+    public async down(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f"
+        `);
+        await queryRunner.query(`
+            ALTER TABLE "invites"
+            ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION
+        `);
+    }
+
+}
diff --git a/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts b/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts
new file mode 100644
index 00000000..9b29e119
--- /dev/null
+++ b/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts
@@ -0,0 +1,246 @@
+import { MigrationInterface, QueryRunner } from "typeorm";
+
+export class InvitersAreDeletable1660416010862 implements MigrationInterface {
+    name = 'InvitersAreDeletable1660416010862'
+
+    public async up(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            CREATE TABLE "temporary_invites" (
+                "code" varchar PRIMARY KEY NOT NULL,
+                "temporary" boolean NOT NULL,
+                "uses" integer NOT NULL,
+                "max_uses" integer NOT NULL,
+                "max_age" integer NOT NULL,
+                "created_at" datetime NOT NULL,
+                "expires_at" datetime NOT NULL,
+                "guild_id" varchar,
+                "channel_id" varchar,
+                "inviter_id" varchar,
+                "target_user_id" varchar,
+                "target_user_type" integer,
+                "vanity_url" boolean,
+                CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION
+            )
+        `);
+        await queryRunner.query(`
+            INSERT INTO "temporary_invites"(
+                    "code",
+                    "temporary",
+                    "uses",
+                    "max_uses",
+                    "max_age",
+                    "created_at",
+                    "expires_at",
+                    "guild_id",
+                    "channel_id",
+                    "inviter_id",
+                    "target_user_id",
+                    "target_user_type",
+                    "vanity_url"
+                )
+            SELECT "code",
+                "temporary",
+                "uses",
+                "max_uses",
+                "max_age",
+                "created_at",
+                "expires_at",
+                "guild_id",
+                "channel_id",
+                "inviter_id",
+                "target_user_id",
+                "target_user_type",
+                "vanity_url"
+            FROM "invites"
+        `);
+        await queryRunner.query(`
+            DROP TABLE "invites"
+        `);
+        await queryRunner.query(`
+            ALTER TABLE "temporary_invites"
+                RENAME TO "invites"
+        `);
+        await queryRunner.query(`
+            CREATE TABLE "temporary_invites" (
+                "code" varchar PRIMARY KEY NOT NULL,
+                "temporary" boolean NOT NULL,
+                "uses" integer NOT NULL,
+                "max_uses" integer NOT NULL,
+                "max_age" integer NOT NULL,
+                "created_at" datetime NOT NULL,
+                "expires_at" datetime NOT NULL,
+                "guild_id" varchar,
+                "channel_id" varchar,
+                "inviter_id" varchar,
+                "target_user_id" varchar,
+                "target_user_type" integer,
+                "vanity_url" boolean,
+                CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION
+            )
+        `);
+        await queryRunner.query(`
+            INSERT INTO "temporary_invites"(
+                    "code",
+                    "temporary",
+                    "uses",
+                    "max_uses",
+                    "max_age",
+                    "created_at",
+                    "expires_at",
+                    "guild_id",
+                    "channel_id",
+                    "inviter_id",
+                    "target_user_id",
+                    "target_user_type",
+                    "vanity_url"
+                )
+            SELECT "code",
+                "temporary",
+                "uses",
+                "max_uses",
+                "max_age",
+                "created_at",
+                "expires_at",
+                "guild_id",
+                "channel_id",
+                "inviter_id",
+                "target_user_id",
+                "target_user_type",
+                "vanity_url"
+            FROM "invites"
+        `);
+        await queryRunner.query(`
+            DROP TABLE "invites"
+        `);
+        await queryRunner.query(`
+            ALTER TABLE "temporary_invites"
+                RENAME TO "invites"
+        `);
+    }
+
+    public async down(queryRunner: QueryRunner): Promise<void> {
+        await queryRunner.query(`
+            ALTER TABLE "invites"
+                RENAME TO "temporary_invites"
+        `);
+        await queryRunner.query(`
+            CREATE TABLE "invites" (
+                "code" varchar PRIMARY KEY NOT NULL,
+                "temporary" boolean NOT NULL,
+                "uses" integer NOT NULL,
+                "max_uses" integer NOT NULL,
+                "max_age" integer NOT NULL,
+                "created_at" datetime NOT NULL,
+                "expires_at" datetime NOT NULL,
+                "guild_id" varchar,
+                "channel_id" varchar,
+                "inviter_id" varchar,
+                "target_user_id" varchar,
+                "target_user_type" integer,
+                "vanity_url" boolean,
+                CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION
+            )
+        `);
+        await queryRunner.query(`
+            INSERT INTO "invites"(
+                    "code",
+                    "temporary",
+                    "uses",
+                    "max_uses",
+                    "max_age",
+                    "created_at",
+                    "expires_at",
+                    "guild_id",
+                    "channel_id",
+                    "inviter_id",
+                    "target_user_id",
+                    "target_user_type",
+                    "vanity_url"
+                )
+            SELECT "code",
+                "temporary",
+                "uses",
+                "max_uses",
+                "max_age",
+                "created_at",
+                "expires_at",
+                "guild_id",
+                "channel_id",
+                "inviter_id",
+                "target_user_id",
+                "target_user_type",
+                "vanity_url"
+            FROM "temporary_invites"
+        `);
+        await queryRunner.query(`
+            DROP TABLE "temporary_invites"
+        `);
+        await queryRunner.query(`
+            ALTER TABLE "invites"
+                RENAME TO "temporary_invites"
+        `);
+        await queryRunner.query(`
+            CREATE TABLE "invites" (
+                "code" varchar PRIMARY KEY NOT NULL,
+                "temporary" boolean NOT NULL,
+                "uses" integer NOT NULL,
+                "max_uses" integer NOT NULL,
+                "max_age" integer NOT NULL,
+                "created_at" datetime NOT NULL,
+                "expires_at" datetime NOT NULL,
+                "guild_id" varchar,
+                "channel_id" varchar,
+                "inviter_id" varchar,
+                "target_user_id" varchar,
+                "target_user_type" integer,
+                "vanity_url" boolean,
+                CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION,
+                CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION,
+                CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION
+            )
+        `);
+        await queryRunner.query(`
+            INSERT INTO "invites"(
+                    "code",
+                    "temporary",
+                    "uses",
+                    "max_uses",
+                    "max_age",
+                    "created_at",
+                    "expires_at",
+                    "guild_id",
+                    "channel_id",
+                    "inviter_id",
+                    "target_user_id",
+                    "target_user_type",
+                    "vanity_url"
+                )
+            SELECT "code",
+                "temporary",
+                "uses",
+                "max_uses",
+                "max_age",
+                "created_at",
+                "expires_at",
+                "guild_id",
+                "channel_id",
+                "inviter_id",
+                "target_user_id",
+                "target_user_type",
+                "vanity_url"
+            FROM "temporary_invites"
+        `);
+        await queryRunner.query(`
+            DROP TABLE "temporary_invites"
+        `);
+    }
+
+}