mirror of
https://github.com/immich-app/immich.git
synced 2026-05-22 23:52:32 -04:00
4bfb8b36c2
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com> Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import {
|
|
AfterDeleteTrigger,
|
|
AfterInsertTrigger,
|
|
Column,
|
|
CreateDateColumn,
|
|
ForeignKeyColumn,
|
|
Generated,
|
|
Index,
|
|
Table,
|
|
Timestamp,
|
|
UpdateDateColumn,
|
|
} from '@immich/sql-tools';
|
|
import { CreateIdColumn, UpdatedAtTrigger, UpdateIdColumn } from 'src/decorators';
|
|
import { AlbumUserRole } from 'src/enum';
|
|
import { album_user_role_enum } from 'src/schema/enums';
|
|
import { album_user_after_insert, album_user_delete_audit } from 'src/schema/functions';
|
|
import { AlbumTable } from 'src/schema/tables/album.table';
|
|
import { UserTable } from 'src/schema/tables/user.table';
|
|
|
|
@Table({ name: 'album_user' })
|
|
@Index({
|
|
name: 'album_user_unique_owner',
|
|
columns: ['albumId'],
|
|
unique: true,
|
|
where: `role = 'owner'`,
|
|
})
|
|
// Pre-existing indices from original album <--> user ManyToMany mapping
|
|
@UpdatedAtTrigger('album_user_updatedAt')
|
|
@AfterInsertTrigger({
|
|
name: 'album_user_after_insert',
|
|
scope: 'statement',
|
|
referencingNewTableAs: 'inserted_rows',
|
|
function: album_user_after_insert,
|
|
})
|
|
@AfterDeleteTrigger({
|
|
scope: 'statement',
|
|
function: album_user_delete_audit,
|
|
referencingOldTableAs: 'old',
|
|
when: 'pg_trigger_depth() <= 1',
|
|
})
|
|
export class AlbumUserTable {
|
|
@ForeignKeyColumn(() => AlbumTable, {
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE',
|
|
nullable: false,
|
|
primary: true,
|
|
})
|
|
albumId!: string;
|
|
|
|
@ForeignKeyColumn(() => UserTable, {
|
|
onDelete: 'CASCADE',
|
|
onUpdate: 'CASCADE',
|
|
nullable: false,
|
|
primary: true,
|
|
})
|
|
userId!: string;
|
|
|
|
@Column({ enum: album_user_role_enum, default: AlbumUserRole.Editor })
|
|
role!: Generated<AlbumUserRole>;
|
|
|
|
@CreateIdColumn({ index: true })
|
|
createId!: Generated<string>;
|
|
|
|
@CreateDateColumn()
|
|
createdAt!: Generated<Timestamp>;
|
|
|
|
@UpdateIdColumn({ index: true })
|
|
updateId!: Generated<string>;
|
|
|
|
@UpdateDateColumn()
|
|
updatedAt!: Generated<Timestamp>;
|
|
}
|