make type nullable

This commit is contained in:
murdle 2025-12-21 15:27:15 +02:00
parent b8039917d0
commit e6e3ab0374
2 changed files with 45 additions and 65 deletions

View File

@ -24,6 +24,6 @@ export class PushSubscription extends BaseClass {
@Column({ type: "varchar", nullable: true }) @Column({ type: "varchar", nullable: true })
p256dh?: string; p256dh?: string;
@Column({ type: "varchar", nullable: false }) @Column({ type: "varchar", nullable: true })
type: "webpush" | "basic" = "webpush"; type: "webpush" | "basic" = "webpush";
} }

View File

@ -1,69 +1,49 @@
import { MigrationInterface, QueryRunner } from "typeorm"; import { MigrationInterface, QueryRunner } from "typeorm";
export class MakeKeysNullable1766283926503 implements MigrationInterface { export class MakeKeysNullable1766283926503 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TABLE "temporary_push_subscriptions" (
"id" varchar PRIMARY KEY NOT NULL,
"user_id" varchar,
"endpoint" varchar NOT NULL,
"expiration_time" bigint,
"auth" varchar,
"p256dh" varchar,
"type" text NOT NULL DEFAULT 'webpush',
CONSTRAINT "UQ_push_subscriptions_endpoint" UNIQUE ("endpoint"),
CONSTRAINT "FK_push_subscriptions_user"
FOREIGN KEY ("user_id") REFERENCES "users"("id")
ON DELETE SET NULL ON UPDATE NO ACTION
)
`);
await queryRunner.query(`
INSERT INTO "temporary_push_subscriptions"("id", "user_id", "endpoint", "expiration_time", "auth", "p256dh", "type")
SELECT "id", "user_id", "endpoint", "expiration_time", "auth", "p256dh", 'webpush'
FROM "push_subscriptions"
`);
await queryRunner.query(`DROP TABLE "push_subscriptions"`);
await queryRunner.query(`ALTER TABLE "temporary_push_subscriptions" RENAME TO "push_subscriptions"`);
await queryRunner.query(`
CREATE UNIQUE INDEX IF NOT EXISTS "idx_push_subscriptions_endpoint"
ON "push_subscriptions" ("endpoint")
`);
}
public async down(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(` await queryRunner.query(`
CREATE TABLE "temporary_push_subscriptions" ( ALTER TABLE "push_subscriptions"
"id" varchar PRIMARY KEY NOT NULL, ALTER COLUMN "auth" DROP NOT NULL;
"user_id" varchar, `);
"endpoint" varchar NOT NULL,
"expiration_time" bigint, await queryRunner.query(`
"auth" varchar NOT NULL, ALTER TABLE "push_subscriptions"
"p256dh" varchar NOT NULL, ALTER COLUMN "p256dh" DROP NOT NULL;
CONSTRAINT "UQ_push_subscriptions_endpoint" UNIQUE ("endpoint"), `);
CONSTRAINT "FK_push_subscriptions_user"
FOREIGN KEY ("user_id") REFERENCES "users"("id") await queryRunner.query(`
ON DELETE SET NULL ON UPDATE NO ACTION ALTER TABLE "push_subscriptions"
) ADD COLUMN "type" text;
`); `);
await queryRunner.query(` await queryRunner.query(`
INSERT INTO "temporary_push_subscriptions"("id", "user_id", "endpoint", "expiration_time", "auth", "p256dh") UPDATE "push_subscriptions"
SELECT "id", "user_id", "endpoint", "expiration_time", "auth", "p256dh" SET "type" = 'webpush'
FROM "push_subscriptions" WHERE "type" IS NULL;
WHERE "auth" IS NOT NULL AND "p256dh" IS NOT NULL `);
`);
await queryRunner.query(`
await queryRunner.query(`DROP TABLE "push_subscriptions"`); ALTER TABLE "push_subscriptions"
ALTER COLUMN "type" SET NOT NULL;
await queryRunner.query(`ALTER TABLE "temporary_push_subscriptions" RENAME TO "push_subscriptions"`); `);
}
await queryRunner.query(`
CREATE UNIQUE INDEX IF NOT EXISTS "idx_push_subscriptions_endpoint" public async down(queryRunner: QueryRunner): Promise<void> {
ON "push_subscriptions" ("endpoint") await queryRunner.query(`
`); ALTER TABLE "push_subscriptions"
} DROP COLUMN "type";
`);
await queryRunner.query(`
ALTER TABLE "push_subscriptions"
ALTER COLUMN "auth" SET NOT NULL;
`);
await queryRunner.query(`
ALTER TABLE "push_subscriptions"
ALTER COLUMN "p256dh" SET NOT NULL;
`);
}
} }