mirror of
https://github.com/immich-app/immich.git
synced 2026-03-26 20:00:44 +03:00
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { Insertable, Kysely, Updateable } from 'kysely';
|
|
import { InjectKysely } from 'nestjs-kysely';
|
|
import { DummyValue, GenerateSql } from 'src/decorators';
|
|
import { AlbumUserRole } from 'src/enum';
|
|
import { DB } from 'src/schema';
|
|
import { AlbumUserTable } from 'src/schema/tables/album-user.table';
|
|
|
|
export type AlbumPermissionId = {
|
|
albumId: string;
|
|
userId: string;
|
|
};
|
|
|
|
@Injectable()
|
|
export class AlbumUserRepository {
|
|
constructor(@InjectKysely() private db: Kysely<DB>) {}
|
|
|
|
@GenerateSql({ params: [{ userId: DummyValue.UUID, albumId: DummyValue.UUID }] })
|
|
create(albumUser: Insertable<AlbumUserTable>) {
|
|
return this.db
|
|
.insertInto('album_user')
|
|
.values(albumUser)
|
|
.returning(['userId', 'albumId', 'role'])
|
|
.executeTakeFirstOrThrow();
|
|
}
|
|
|
|
@GenerateSql({ params: [{ userId: DummyValue.UUID, albumId: DummyValue.UUID }, { role: AlbumUserRole.Viewer }] })
|
|
async update({ userId, albumId }: AlbumPermissionId, dto: Updateable<AlbumUserTable>) {
|
|
await this.db
|
|
.updateTable('album_user')
|
|
.set(dto)
|
|
.where('userId', '=', userId)
|
|
.where('albumId', '=', albumId)
|
|
.execute();
|
|
}
|
|
|
|
@GenerateSql({ params: [{ userId: DummyValue.UUID, albumId: DummyValue.UUID }] })
|
|
async delete({ userId, albumId }: AlbumPermissionId): Promise<void> {
|
|
await this.db.deleteFrom('album_user').where('userId', '=', userId).where('albumId', '=', albumId).execute();
|
|
}
|
|
}
|