Files
immich/server/src/schema/tables/album-user.table.ts

68 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-06-18 10:48:11 -04:00
import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
2025-03-28 10:40:09 -04:00
import { AlbumUserRole } from 'src/enum';
import { album_user_after_insert, album_users_delete_audit } from 'src/schema/functions';
2025-03-29 09:26:24 -04:00
import { AlbumTable } from 'src/schema/tables/album.table';
import { UserTable } from 'src/schema/tables/user.table';
import {
AfterDeleteTrigger,
AfterInsertTrigger,
Column,
2025-06-18 10:48:11 -04:00
CreateDateColumn,
ForeignKeyColumn,
2025-06-30 13:19:16 -04:00
Generated,
Index,
Table,
2025-06-30 13:19:16 -04:00
Timestamp,
UpdateDateColumn,
} from 'src/sql-tools';
2025-03-28 10:40:09 -04:00
@Table({ name: 'albums_shared_users_users', primaryConstraintName: 'PK_7df55657e0b2e8b626330a0ebc8' })
// Pre-existing indices from original album <--> user ManyToMany mapping
@Index({ name: 'IDX_427c350ad49bd3935a50baab73', columns: ['albumsId'] })
@Index({ name: 'IDX_f48513bf9bccefd6ff3ad30bd0', columns: ['usersId'] })
@UpdatedAtTrigger('album_users_updated_at')
@AfterInsertTrigger({
name: 'album_user_after_insert',
scope: 'statement',
referencingNewTableAs: 'inserted_rows',
function: album_user_after_insert,
})
@AfterDeleteTrigger({
scope: 'statement',
function: album_users_delete_audit,
referencingOldTableAs: 'old',
when: 'pg_trigger_depth() <= 1',
})
2025-03-28 10:40:09 -04:00
export class AlbumUserTable {
@ForeignKeyColumn(() => AlbumTable, {
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
nullable: false,
primary: true,
})
albumsId!: string;
@ForeignKeyColumn(() => UserTable, {
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
nullable: false,
primary: true,
})
usersId!: string;
@Column({ type: 'character varying', default: AlbumUserRole.EDITOR })
2025-06-30 13:19:16 -04:00
role!: Generated<AlbumUserRole>;
2025-06-18 10:48:11 -04:00
@CreateIdColumn({ indexName: 'IDX_album_users_create_id' })
2025-06-30 13:19:16 -04:00
createId!: Generated<string>;
2025-06-18 10:48:11 -04:00
@CreateDateColumn()
2025-06-30 13:19:16 -04:00
createdAt!: Generated<Timestamp>;
2025-06-18 10:48:11 -04:00
@UpdateIdColumn({ indexName: 'IDX_album_users_update_id' })
2025-06-30 13:19:16 -04:00
updateId!: Generated<string>;
@UpdateDateColumn()
2025-06-30 13:19:16 -04:00
updatedAt!: Generated<Timestamp>;
2025-03-28 10:40:09 -04:00
}