move to uuid columns
This commit is contained in:
parent
03fec5f832
commit
a19d0bab25
|
@ -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',
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -10,6 +10,7 @@ export class EImageBackend implements EImage {
|
||||||
|
|
||||||
@Column({
|
@Column({
|
||||||
nullable: false,
|
nullable: false,
|
||||||
|
type: 'uuid',
|
||||||
})
|
})
|
||||||
user_id: string;
|
user_id: string;
|
||||||
|
|
||||||
|
|
|
@ -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[];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
26
backend/src/database/migrations/1662535484200-V_0_4_0_c.ts
Normal file
26
backend/src/database/migrations/1662535484200-V_0_4_0_c.ts
Normal 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")`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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,
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue