import { ColumnType } from 'kysely'; import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators'; import { UserAvatarColor, UserStatus } from 'src/enum'; import { user_delete_audit } from 'src/schema/functions'; import { AfterDeleteTrigger, Column, CreateDateColumn, DeleteDateColumn, Generated, Index, PrimaryGeneratedColumn, Table, Timestamp, UpdateDateColumn, } from 'src/sql-tools'; @Table('user') @UpdatedAtTrigger('user_updatedAt') @AfterDeleteTrigger({ scope: 'statement', function: user_delete_audit, referencingOldTableAs: 'old', when: 'pg_trigger_depth() = 0', }) @Index({ columns: ['updatedAt', 'id'] }) export class UserTable { @PrimaryGeneratedColumn() id!: Generated; @Column({ unique: true }) email!: string; @Column({ default: '' }) password!: Generated; @Column({ nullable: true }) pinCode!: string | null; @CreateDateColumn() createdAt!: Generated; @Column({ default: '' }) profileImagePath!: Generated; @Column({ type: 'boolean', default: false }) isAdmin!: Generated; @Column({ type: 'boolean', default: true }) shouldChangePassword!: Generated; @Column({ default: null }) avatarColor!: UserAvatarColor | null; @DeleteDateColumn() deletedAt!: Timestamp | null; @Column({ default: '' }) oauthId!: Generated; @UpdateDateColumn() updatedAt!: Generated; @Column({ unique: true, nullable: true, default: null }) storageLabel!: string | null; @Column({ default: '' }) name!: Generated; @Column({ type: 'bigint', nullable: true }) quotaSizeInBytes!: ColumnType | null; @Column({ type: 'bigint', default: 0 }) quotaUsageInBytes!: Generated>; @Column({ type: 'character varying', default: UserStatus.ACTIVE }) status!: Generated; @Column({ type: 'timestamp with time zone', default: () => 'now()' }) profileChangedAt!: Generated; @UpdateIdColumn({ index: true }) updateId!: Generated; }