immich/server/src/schema/tables/user.table.ts

85 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-03-28 10:40:09 -04:00
import { ColumnType } from 'kysely';
import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
2025-04-28 09:54:51 -04:00
import { UserAvatarColor, UserStatus } from 'src/enum';
import { users_delete_audit } from 'src/schema/functions';
2025-03-28 10:40:09 -04:00
import {
AfterDeleteTrigger,
2025-03-28 10:40:09 -04:00
Column,
CreateDateColumn,
DeleteDateColumn,
2025-06-30 13:19:16 -04:00
Generated,
2025-03-28 10:40:09 -04:00
Index,
PrimaryGeneratedColumn,
Table,
2025-06-30 13:19:16 -04:00
Timestamp,
2025-03-28 10:40:09 -04:00
UpdateDateColumn,
} from 'src/sql-tools';
@Table('users')
@UpdatedAtTrigger('users_updated_at')
@AfterDeleteTrigger({
scope: 'statement',
function: users_delete_audit,
referencingOldTableAs: 'old',
when: 'pg_trigger_depth() = 0',
})
2025-03-28 10:40:09 -04:00
@Index({ name: 'IDX_users_updated_at_asc_id_asc', columns: ['updatedAt', 'id'] })
export class UserTable {
@PrimaryGeneratedColumn()
id!: Generated<string>;
@Column({ unique: true })
email!: string;
@Column({ default: '' })
password!: Generated<string>;
@Column({ nullable: true })
pinCode!: string | null;
@CreateDateColumn()
createdAt!: Generated<Timestamp>;
2025-03-28 10:40:09 -04:00
@Column({ default: '' })
profileImagePath!: Generated<string>;
@Column({ type: 'boolean', default: false })
isAdmin!: Generated<boolean>;
2025-03-28 10:40:09 -04:00
@Column({ type: 'boolean', default: true })
shouldChangePassword!: Generated<boolean>;
2025-04-28 09:54:51 -04:00
@Column({ default: null })
avatarColor!: UserAvatarColor | null;
@DeleteDateColumn()
deletedAt!: Timestamp | null;
@Column({ default: '' })
oauthId!: Generated<string>;
2025-03-28 10:40:09 -04:00
@UpdateDateColumn()
updatedAt!: Generated<Timestamp>;
@Column({ unique: true, nullable: true, default: null })
storageLabel!: string | null;
2025-03-28 10:40:09 -04:00
@Column({ default: '' })
name!: Generated<string>;
2025-03-28 10:40:09 -04:00
@Column({ type: 'bigint', nullable: true })
quotaSizeInBytes!: ColumnType<number> | null;
@Column({ type: 'bigint', default: 0 })
quotaUsageInBytes!: Generated<ColumnType<number>>;
@Column({ type: 'character varying', default: UserStatus.ACTIVE })
status!: Generated<UserStatus>;
2025-03-28 10:40:09 -04:00
@Column({ type: 'timestamp with time zone', default: () => 'now()' })
profileChangedAt!: Generated<Timestamp>;
2025-04-17 14:41:06 -04:00
@UpdateIdColumn({ indexName: 'IDX_users_update_id' })
updateId!: Generated<string>;
2025-03-28 10:40:09 -04:00
}