mirror of
https://github.com/immich-app/immich.git
synced 2025-11-14 02:26:50 -05:00
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
|
|
import { AlbumUserRole } from 'src/enum';
|
|
import { album_user_after_insert, album_users_delete_audit } from 'src/schema/functions';
|
|
import { AlbumTable } from 'src/schema/tables/album.table';
|
|
import { UserTable } from 'src/schema/tables/user.table';
|
|
import {
|
|
AfterDeleteTrigger,
|
|
AfterInsertTrigger,
|
|
Column,
|
|
ForeignKeyColumn,
|
|
Index,
|
|
Table,
|
|
UpdateDateColumn,
|
|
} from 'src/sql-tools';
|
|
|
|
@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({
|
|
name: 'album_users_delete_audit',
|
|
scope: 'statement',
|
|
function: album_users_delete_audit,
|
|
referencingOldTableAs: 'old',
|
|
when: 'pg_trigger_depth() <= 1',
|
|
})
|
|
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 })
|
|
role!: AlbumUserRole;
|
|
|
|
@UpdateIdColumn({ indexName: 'IDX_album_users_update_id' })
|
|
updateId?: string;
|
|
|
|
@UpdateDateColumn()
|
|
updatedAt!: Date;
|
|
}
|