import { Injectable } from '@nestjs/common'; import { Insertable, Kysely, Updateable } from 'kysely'; import { InjectKysely } from 'nestjs-kysely'; import { DB, MoveHistory } from 'src/db'; import { DummyValue, GenerateSql } from 'src/decorators'; import { MoveEntity } from 'src/entities/move.entity'; import { PathType } from 'src/enum'; import { IMoveRepository } from 'src/interfaces/move.interface'; @Injectable() export class MoveRepository implements IMoveRepository { constructor(@InjectKysely() private db: Kysely) {} create(entity: Insertable): Promise { return this.db .insertInto('move_history') .values(entity) .returningAll() .executeTakeFirstOrThrow() as Promise; } @GenerateSql({ params: [DummyValue.UUID, DummyValue.STRING] }) getByEntity(entityId: string, pathType: PathType): Promise { return this.db .selectFrom('move_history') .selectAll() .where('entityId', '=', entityId) .where('pathType', '=', pathType) .executeTakeFirst() as Promise; } update(id: string, entity: Updateable): Promise { return this.db .updateTable('move_history') .set(entity) .where('id', '=', id) .returningAll() .executeTakeFirstOrThrow() as unknown as Promise; } @GenerateSql({ params: [DummyValue.UUID] }) delete(id: string): Promise { return this.db .deleteFrom('move_history') .where('id', '=', id) .returningAll() .executeTakeFirstOrThrow() as unknown as Promise; } }