move to uuid columns

This commit is contained in:
rubikscraft 2022-09-07 09:32:56 +02:00
parent 03fec5f832
commit a19d0bab25
No known key found for this signature in database
GPG key ID: 3570A2BB18A63D9F
7 changed files with 48 additions and 4 deletions

View file

@ -22,7 +22,7 @@ export class EImageDerivativeBackend {
onDelete: 'CASCADE', onDelete: 'CASCADE',
}) })
@JoinColumn({ name: 'image_id' }) @JoinColumn({ name: 'image_id' })
private _image: any; private _image?: any;
@Column({ @Column({
name: 'image_id', name: 'image_id',

View file

@ -23,7 +23,7 @@ export class EImageFileBackend {
onDelete: 'CASCADE', onDelete: 'CASCADE',
}) })
@JoinColumn({ name: 'image_id' }) @JoinColumn({ name: 'image_id' })
private _image: any; private _image?: any;
@Column({ @Column({
name: 'image_id' name: 'image_id'

View file

@ -10,6 +10,7 @@ export class EImageBackend implements EImage {
@Column({ @Column({
nullable: false, nullable: false,
type: 'uuid',
}) })
user_id: string; user_id: string;

View file

@ -8,6 +8,7 @@ import {
} from 'typeorm'; } from 'typeorm';
import { z } from 'zod'; import { z } from 'zod';
import { EApiKeyBackend } from './apikey.entity'; import { EApiKeyBackend } from './apikey.entity';
import { EUsrPreferenceBackend } from './usr-preference.entity';
// Different data for public and private // Different data for public and private
const OverriddenEUserSchema = EUserSchema.omit({ hashedPassword: true }).merge( const OverriddenEUserSchema = EUserSchema.omit({ hashedPassword: true }).merge(
@ -35,4 +36,7 @@ export class EUserBackend implements OverriddenEUser {
// This will never be populated, it is only here to auto delete apikeys when a user is deleted // This will never be populated, it is only here to auto delete apikeys when a user is deleted
@OneToMany(() => EApiKeyBackend, (apikey) => apikey.user) @OneToMany(() => EApiKeyBackend, (apikey) => apikey.user)
apikeys?: EApiKeyBackend[]; apikeys?: EApiKeyBackend[];
@OneToMany(() => EUsrPreferenceBackend, (pref) => pref.user_id)
preferences?: EUsrPreferenceBackend[];
} }

View file

@ -1,6 +1,7 @@
import { IsEntityID } from 'picsur-shared/dist/validators/entity-id.validator'; import { IsEntityID } from 'picsur-shared/dist/validators/entity-id.validator';
import { Column, Entity, Index, PrimaryGeneratedColumn, Unique } from 'typeorm'; import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryGeneratedColumn, Unique } from 'typeorm';
import z from 'zod'; import z from 'zod';
import { EUserBackend } from './user.entity';
export const EUsrPreferenceSchema = z.object({ export const EUsrPreferenceSchema = z.object({
id: IsEntityID().optional(), id: IsEntityID().optional(),
@ -23,7 +24,17 @@ export class EUsrPreferenceBackend implements EUsrPreference {
@Column({ nullable: false }) @Column({ nullable: false })
value: string; value: string;
// We do a little trickery
@Index() @Index()
@Column({ nullable: false }) @ManyToOne(() => EUserBackend, (user) => user.preferences, {
nullable: false,
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'user_id' })
private _user?: any;
@Column({
name: 'user_id'
})
user_id: string; user_id: string;
} }

View file

@ -0,0 +1,26 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class V040C1662535484200 implements MigrationInterface {
name = 'V040C1662535484200'
public async up(queryRunner: QueryRunner): Promise<void> {
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<void> {
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")`);
}
}

View file

@ -2,10 +2,12 @@ import { V030A1661692206479 } from './1661692206479-V_0_3_0_a';
import { V032A1662029904716 } from './1662029904716-V_0_3_2_a'; import { V032A1662029904716 } from './1662029904716-V_0_3_2_a';
import { V040A1662314197741 } from './1662314197741-V_0_4_0_a'; import { V040A1662314197741 } from './1662314197741-V_0_4_0_a';
import { V040B1662485374471 } from './1662485374471-V_0_4_0_b'; import { V040B1662485374471 } from './1662485374471-V_0_4_0_b';
import { V040C1662535484200 } from './1662535484200-V_0_4_0_c';
export const MigrationList: Function[] = [ export const MigrationList: Function[] = [
V030A1661692206479, V030A1661692206479,
V032A1662029904716, V032A1662029904716,
V040A1662314197741, V040A1662314197741,
V040B1662485374471, V040B1662485374471,
V040C1662535484200,
]; ];