diff --git a/backend/src/database/entities/image-file.entity.ts b/backend/src/database/entities/image-file.entity.ts index b963853..f4ab13b 100644 --- a/backend/src/database/entities/image-file.entity.ts +++ b/backend/src/database/entities/image-file.entity.ts @@ -26,7 +26,7 @@ export class EImageFileBackend { private _image?: any; @Column({ - name: 'image_id' + name: 'image_id', }) image_id: string; diff --git a/backend/src/database/entities/image.entity.ts b/backend/src/database/entities/image.entity.ts index e28ac67..bd89cb5 100644 --- a/backend/src/database/entities/image.entity.ts +++ b/backend/src/database/entities/image.entity.ts @@ -27,7 +27,7 @@ export class EImageBackend implements EImage { file_name: string; @Column({ - type: "timestamptz", + type: 'timestamptz', nullable: true, }) expires_at: Date | null; diff --git a/backend/src/database/entities/usr-preference.entity.ts b/backend/src/database/entities/usr-preference.entity.ts index 42b9ff0..55cf17a 100644 --- a/backend/src/database/entities/usr-preference.entity.ts +++ b/backend/src/database/entities/usr-preference.entity.ts @@ -1,5 +1,13 @@ import { IsEntityID } from 'picsur-shared/dist/validators/entity-id.validator'; -import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, Unique } from 'typeorm'; +import { + Column, + Entity, + Index, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + Unique, +} from 'typeorm'; import z from 'zod'; import { EUserBackend } from './user.entity'; @@ -34,7 +42,7 @@ export class EUsrPreferenceBackend implements EUsrPreference { private _user?: any; @Column({ - name: 'user_id' + name: 'user_id', }) user_id: string; } diff --git a/backend/src/database/migrations/1662485374471-V_0_4_0_b.ts b/backend/src/database/migrations/1662485374471-V_0_4_0_b.ts index 49a0b0f..7dbc3a2 100644 --- a/backend/src/database/migrations/1662485374471-V_0_4_0_b.ts +++ b/backend/src/database/migrations/1662485374471-V_0_4_0_b.ts @@ -1,39 +1,92 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; +import { MigrationInterface, QueryRunner } from 'typeorm'; export class V040B1662485374471 implements MigrationInterface { - name = 'V040B1662485374471' + name = 'V040B1662485374471'; - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_image_backend" ADD "expires_at" TIMESTAMP`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a"`); - await queryRunner.query(`DROP INDEX "public"."IDX_8055f37d3b9f52f421b94ee84d"`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE UUID USING image_id::uuid`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75"`); - await queryRunner.query(`DROP INDEX "public"."IDX_37055605f39b3f8847232d604f"`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "image_id" SET DATA TYPE UUID USING image_id::uuid`); - await queryRunner.query(`CREATE INDEX "IDX_8055f37d3b9f52f421b94ee84d" ON "e_image_file_backend" ("image_id") `); - await queryRunner.query(`CREATE INDEX "IDX_37055605f39b3f8847232d604f" ON "e_image_derivative_backend" ("image_id") `); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a" UNIQUE ("image_id", "variant")`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75" UNIQUE ("image_id", "key")`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "FK_8055f37d3b9f52f421b94ee84db" FOREIGN KEY ("image_id") REFERENCES "e_image_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "FK_37055605f39b3f8847232d604f8" FOREIGN KEY ("image_id") REFERENCES "e_image_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "FK_37055605f39b3f8847232d604f8"`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "FK_8055f37d3b9f52f421b94ee84db"`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75"`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a"`); - await queryRunner.query(`DROP INDEX "public"."IDX_37055605f39b3f8847232d604f"`); - await queryRunner.query(`DROP INDEX "public"."IDX_8055f37d3b9f52f421b94ee84d"`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE character varying`); - await queryRunner.query(`CREATE INDEX "IDX_37055605f39b3f8847232d604f" ON "e_image_derivative_backend" ("image_id") `); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75" UNIQUE ("image_id", "key")`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" DROP COLUMN "image_id"`); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE character varying`); - await queryRunner.query(`CREATE INDEX "IDX_8055f37d3b9f52f421b94ee84d" ON "e_image_file_backend" ("image_id") `); - await queryRunner.query(`ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a" UNIQUE ("image_id", "variant")`); - await queryRunner.query(`ALTER TABLE "e_image_backend" DROP COLUMN "expires_at"`); - } + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_image_backend" ADD "expires_at" TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_8055f37d3b9f52f421b94ee84d"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE UUID USING image_id::uuid`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_37055605f39b3f8847232d604f"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "image_id" SET DATA TYPE UUID USING image_id::uuid`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_8055f37d3b9f52f421b94ee84d" ON "e_image_file_backend" ("image_id") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_37055605f39b3f8847232d604f" ON "e_image_derivative_backend" ("image_id") `, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a" UNIQUE ("image_id", "variant")`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75" UNIQUE ("image_id", "key")`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "FK_8055f37d3b9f52f421b94ee84db" FOREIGN KEY ("image_id") REFERENCES "e_image_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "FK_37055605f39b3f8847232d604f8" FOREIGN KEY ("image_id") REFERENCES "e_image_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "FK_37055605f39b3f8847232d604f8"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "FK_8055f37d3b9f52f421b94ee84db"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" DROP CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" DROP CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_37055605f39b3f8847232d604f"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_8055f37d3b9f52f421b94ee84d"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE character varying`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_37055605f39b3f8847232d604f" ON "e_image_derivative_backend" ("image_id") `, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ADD CONSTRAINT "UQ_fa03f5333afd74c5cc5ff780d75" UNIQUE ("image_id", "key")`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" DROP COLUMN "image_id"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ALTER COLUMN "image_id" SET DATA TYPE character varying`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_8055f37d3b9f52f421b94ee84d" ON "e_image_file_backend" ("image_id") `, + ); + await queryRunner.query( + `ALTER TABLE "e_image_file_backend" ADD CONSTRAINT "UQ_872384f20feaf7bfd27e28b8d4a" UNIQUE ("image_id", "variant")`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" DROP COLUMN "expires_at"`, + ); + } } diff --git a/backend/src/database/migrations/1662535484200-V_0_4_0_c.ts b/backend/src/database/migrations/1662535484200-V_0_4_0_c.ts index 2bbc8fc..5293bb9 100644 --- a/backend/src/database/migrations/1662535484200-V_0_4_0_c.ts +++ b/backend/src/database/migrations/1662535484200-V_0_4_0_c.ts @@ -1,26 +1,53 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; +import { MigrationInterface, QueryRunner } from 'typeorm'; export class V040C1662535484200 implements MigrationInterface { - name = 'V040C1662535484200' + name = 'V040C1662535484200'; - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "UQ_576678406a479d569123a33e132"`); - await queryRunner.query(`DROP INDEX "public"."IDX_f1a427e855045fa793c275861a"`); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" ALTER COLUMN "user_id" SET DATA TYPE UUID USING user_id::uuid`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "user_id" SET DATA TYPE UUID USING user_id::uuid`); - await queryRunner.query(`CREATE INDEX "IDX_f1a427e855045fa793c275861a" ON "e_usr_preference_backend" ("user_id") `); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "UQ_576678406a479d569123a33e132" UNIQUE ("key", "user_id")`); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "FK_f1a427e855045fa793c275861a7" FOREIGN KEY ("user_id") REFERENCES "e_user_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "FK_f1a427e855045fa793c275861a7"`); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "UQ_576678406a479d569123a33e132"`); - await queryRunner.query(`DROP INDEX "public"."IDX_f1a427e855045fa793c275861a"`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "user_id" SET DATA TYPE character varying`); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" ALTER COLUMN "user_id" SET DATA TYPE character varying`); - await queryRunner.query(`CREATE INDEX "IDX_f1a427e855045fa793c275861a" ON "e_usr_preference_backend" ("user_id") `); - await queryRunner.query(`ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "UQ_576678406a479d569123a33e132" UNIQUE ("key", "user_id")`); - } + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "UQ_576678406a479d569123a33e132"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_f1a427e855045fa793c275861a"`, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" ALTER COLUMN "user_id" SET DATA TYPE UUID USING user_id::uuid`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "user_id" SET DATA TYPE UUID USING user_id::uuid`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_f1a427e855045fa793c275861a" ON "e_usr_preference_backend" ("user_id") `, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "UQ_576678406a479d569123a33e132" UNIQUE ("key", "user_id")`, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "FK_f1a427e855045fa793c275861a7" FOREIGN KEY ("user_id") REFERENCES "e_user_backend"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "FK_f1a427e855045fa793c275861a7"`, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" DROP CONSTRAINT "UQ_576678406a479d569123a33e132"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_f1a427e855045fa793c275861a"`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "user_id" SET DATA TYPE character varying`, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" ALTER COLUMN "user_id" SET DATA TYPE character varying`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_f1a427e855045fa793c275861a" ON "e_usr_preference_backend" ("user_id") `, + ); + await queryRunner.query( + `ALTER TABLE "e_usr_preference_backend" ADD CONSTRAINT "UQ_576678406a479d569123a33e132" UNIQUE ("key", "user_id")`, + ); + } } diff --git a/backend/src/database/migrations/1662728275448-V_0_4_0_d.ts b/backend/src/database/migrations/1662728275448-V_0_4_0_d.ts index f561d79..e9fd6df 100644 --- a/backend/src/database/migrations/1662728275448-V_0_4_0_d.ts +++ b/backend/src/database/migrations/1662728275448-V_0_4_0_d.ts @@ -1,22 +1,41 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; +import { MigrationInterface, QueryRunner } from 'typeorm'; export class V040D1662728275448 implements MigrationInterface { - name = 'V040D1662728275448' + name = 'V040D1662728275448'; - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_api_key_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "created" SET NOT NULL`); - await queryRunner.query(`ALTER TABLE "e_api_key_backend" ALTER COLUMN "last_used" SET DATA TYPE TIMESTAMP WITH TIME ZONE`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "created" SET NOT NULL`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP WITH TIME ZONE`); - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "last_read" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "last_read" SET NOT NULL`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "last_read" SET DATA TYPE TIMESTAMP, ALTER COLUMN "last_read" SET NOT NULL`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP`); - await queryRunner.query(`ALTER TABLE "e_image_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP, ALTER COLUMN "created" SET NOT NULL`); - await queryRunner.query(`ALTER TABLE "e_api_key_backend" ALTER COLUMN "last_used" SET DATA TYPE TIMESTAMP`); - await queryRunner.query(`ALTER TABLE "e_api_key_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP, ALTER COLUMN "created" SET NOT NULL`); - } + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_api_key_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "created" SET NOT NULL`, + ); + await queryRunner.query( + `ALTER TABLE "e_api_key_backend" ALTER COLUMN "last_used" SET DATA TYPE TIMESTAMP WITH TIME ZONE`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "created" SET NOT NULL`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP WITH TIME ZONE`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "last_read" SET DATA TYPE TIMESTAMP WITH TIME ZONE, ALTER COLUMN "last_read" SET NOT NULL`, + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "e_image_derivative_backend" ALTER COLUMN "last_read" SET DATA TYPE TIMESTAMP, ALTER COLUMN "last_read" SET NOT NULL`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "expires_at" SET DATA TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "e_image_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP, ALTER COLUMN "created" SET NOT NULL`, + ); + await queryRunner.query( + `ALTER TABLE "e_api_key_backend" ALTER COLUMN "last_used" SET DATA TYPE TIMESTAMP`, + ); + await queryRunner.query( + `ALTER TABLE "e_api_key_backend" ALTER COLUMN "created" SET DATA TYPE TIMESTAMP, ALTER COLUMN "created" SET NOT NULL`, + ); + } } diff --git a/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.html b/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.html index 39ef3fe..689586e 100644 --- a/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.html +++ b/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.html @@ -12,7 +12,7 @@
Expires After - + {{ option[0] }} diff --git a/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.scss b/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.scss index 53a4bc5..c7acb4b 100644 --- a/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.scss +++ b/frontend/src/app/routes/view/edit-dialog/edit-dialog.component.scss @@ -1,3 +1,3 @@ mat-form-field { width: 100%; -} \ No newline at end of file +} diff --git a/shared/src/entities/image.entity.ts b/shared/src/entities/image.entity.ts index 9069e4c..22cbc81 100644 --- a/shared/src/entities/image.entity.ts +++ b/shared/src/entities/image.entity.ts @@ -10,8 +10,6 @@ export const EImageSchema = z.object({ user_id: IsEntityID(), created: z.preprocess((data: any) => new Date(data), z.date()), file_name: z.string(), - expires_at: z - .preprocess((data: any) => new Date(data), z.date()) - .nullable(), + expires_at: z.preprocess((data: any) => new Date(data), z.date()).nullable(), }); export type EImage = z.infer;