fix(db): explicit TypeORM column types for nullable string/uuid columns

`string | null` / `uuid | null` columns reflect as Object and crash the
backend at metadata build (DataTypeNotSupportedError). Declare explicit
`type` on users.phone/email and cluster_allocation_logs FK id columns.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
keyhan
2026-06-17 13:09:26 +03:30
parent a3b7e9055c
commit 7d7971744e
2 changed files with 10 additions and 5 deletions
@@ -17,7 +17,9 @@ export class ClusterAllocationLog {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ nullable: true })
// Explicit `type` required: `string | null` reflects as Object and crashes
// TypeORM at metadata build (DataTypeNotSupportedError).
@Column({ type: 'uuid', nullable: true })
applicationId?: string | null;
@ManyToOne(() => Application, { nullable: true, onDelete: 'SET NULL' })
@@ -27,14 +29,14 @@ export class ClusterAllocationLog {
@Column()
userId: string;
@Column({ nullable: true })
@Column({ type: 'uuid', nullable: true })
poolId?: string | null;
@ManyToOne(() => ClusterPool, { nullable: true, onDelete: 'SET NULL' })
@JoinColumn({ name: 'poolId' })
pool: ClusterPool;
@Column({ nullable: true })
@Column({ type: 'uuid', nullable: true })
selectedClusterId?: string | null;
@ManyToOne(() => Cluster, { nullable: true, onDelete: 'SET NULL' })
+5 -2
View File
@@ -18,10 +18,13 @@ export class User {
// optional contact field only — it is never used to authenticate.
// Both are unique; Postgres treats NULLs as distinct, so accounts missing
// either coexist freely.
@Column({ unique: true, nullable: true })
// NOTE: nullable string columns MUST declare an explicit `type` — TypeScript
// reflects the `string | null` union as `Object`, which TypeORM rejects with
// DataTypeNotSupportedError and crashes the backend at metadata build.
@Column({ type: 'varchar', unique: true, nullable: true })
phone: string | null; // canonical E.164, e.g. +989121234567
@Column({ unique: true, nullable: true })
@Column({ type: 'varchar', unique: true, nullable: true })
email: string | null;
@Column({ default: false })