diff --git a/apps/api/contexts/identify-access/user/infras/persistence/pg/user.repository.pg.impl.ts b/apps/api/contexts/identify-access/user/infras/persistence/pg/user.repository.pg.impl.ts index 107b7bc2..85503b8e 100644 --- a/apps/api/contexts/identify-access/user/infras/persistence/pg/user.repository.pg.impl.ts +++ b/apps/api/contexts/identify-access/user/infras/persistence/pg/user.repository.pg.impl.ts @@ -1,17 +1,11 @@ import type { UserTable } from "@techmely/models"; -import type { Kysely } from "kysely"; -import { PgRepositoryBase } from "../../../../../../libs/db/repository-pg.base.ts"; -import type { UserEntity } from "../../../domain/entities/user.entity.ts"; -import type { IUserRepository } from "../../../domain/repo/user.repository.ts"; -import type { UserMapper } from "../../mappers/user.mapper.ts"; +import { PgRepositoryBase } from "#root/libs/db/repository-pg.base"; +import type { UserEntity } from "../../../domain/entities/user.entity"; +import type { IUserRepository } from "../../../domain/repo/user.repository"; export class UserPgRepository extends PgRepositoryBase implements IUserRepository { protected tableName = "users"; - - constructor(mapper: UserMapper, db: Kysely) { - super(mapper, db); - } } diff --git a/apps/api/libs/db/repository-pg.base.ts b/apps/api/libs/db/repository-pg.base.ts index 2af5bfc8..ad5d87db 100644 --- a/apps/api/libs/db/repository-pg.base.ts +++ b/apps/api/libs/db/repository-pg.base.ts @@ -1,15 +1,24 @@ -import type { Paginated, PaginatedQueryParams, RepositoryPort } from "@techmely/domain-driven"; +import type { + Entity as BaseEntity, + DomainMapper, + Paginated, + PaginatedQueryParams, + RepositoryPort, +} from "@techmely/domain-driven"; import type { StringEnum } from "@techmely/types"; import type { Kysely } from "kysely"; -export abstract class PgRepositoryBase, DbTables = any> - implements RepositoryPort +export abstract class PgRepositoryBase, DbModel, DbTables = any> + implements RepositoryPort { protected abstract tableName: StringEnum; - protected constructor(protected readonly db: Kysely) {} + protected constructor( + protected readonly mapper: DomainMapper, + protected readonly db: Kysely, + ) {} - async findById(id: string): Promise { + async findById(id: string): Promise { const record = await this.db // @ts-expect-error I knew .selectFrom(table) @@ -18,15 +27,16 @@ export abstract class PgRepositoryBase, .where("id", "=", id) .executeTakeFirstOrThrow(); // @ts-expect-error I knew - return record; + return this.mapper.toDomain(record); } - findByKey(key: StringEnum): Promise { + // @ts-expect-error I knew + findByKey(key: StringEnum): Promise { throw new Error("Method not implemented."); } - findAll(): Promise { + findAll(): Promise { throw new Error("Method not implemented."); } - async findAllByIds(ids: string[]): Promise { + async findAllByIds(ids: string[]): Promise { // const _x = await this.db // // @ts-expect-error I knew // .selectFrom(this.tableName) @@ -37,7 +47,7 @@ export abstract class PgRepositoryBase, // return []; throw new Error("Method not implemented."); } - findAllPaginated(params: PaginatedQueryParams): Promise> { + findAllPaginated(params: PaginatedQueryParams): Promise> { throw new Error("Method not implemented."); } existsById(id: string): Promise { @@ -46,7 +56,7 @@ export abstract class PgRepositoryBase, count(): Promise { throw new Error("Method not implemented."); } - async insert(entity: DbModel) { + async insert(entity: Entity) { const record = this.mapper.toPersistence(entity); // @ts-expect-error I knew const { id } = await this.db @@ -58,16 +68,16 @@ export abstract class PgRepositoryBase, .executeTakeFirstOrThrow(); return this.findById(id); } - insertMany(entities: DbModel[]): Promise { + insertMany(entities: Entity[]): Promise { throw new Error("Method not implemented."); } - insertBulk(entity: DbModel): Promise { + insertBulk(entity: Entity): Promise { throw new Error("Method not implemented."); } - insertBulkMany(entities: DbModel[]): Promise { + insertBulkMany(entities: Entity[]): Promise { throw new Error("Method not implemented."); } - async update(entity: DbModel): Promise { + async update(entity: Entity): Promise { const id = entity.id.toString(); await this.db // @ts-expect-error I knew @@ -78,16 +88,16 @@ export abstract class PgRepositoryBase, .executeTakeFirstOrThrow(); return this.findById(id); } - updateBulk(entity: DbModel): Promise { + updateBulk(entity: Entity): Promise { throw new Error("Method not implemented."); } - updateMany(entities: DbModel[]): Promise { + updateMany(entities: Entity[]): Promise { throw new Error("Method not implemented."); } - updateBulkMany(entities: DbModel[]): Promise { + updateBulkMany(entities: Entity[]): Promise { throw new Error("Method not implemented."); } - async delete(entity: DbModel): Promise { + async delete(entity: Entity): Promise { const id = entity.id.toString(); const { numDeletedRows } = await this.db // @ts-expect-error I knew @@ -103,9 +113,10 @@ export abstract class PgRepositoryBase, deleteAllByIds(ids: string[]): Promise { throw new Error("Method not implemented."); } - async deleteBulk(ids: string[]): Promise { + async deleteBulk(ids: string[]): Promise { // @ts-expect-error I knew - await this.db.deleteFrom(this.tableName).where("id", "in", ids).execute(); + await this.db.deleteFrom(this.tableName).where("id", "in", ids).executeTakeFirstOrThrow(); + return true; } transaction(handler: () => Promise): Promise { throw new Error("Method not implemented."); diff --git a/apps/api/package.json b/apps/api/package.json index a58bdade..1fd739fa 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -23,7 +23,7 @@ "@techmely/auth": "^1.0.1", "@techmely/cache": "1.0.9", "@techmely/db": "workspace:*", - "@techmely/domain-driven": "1.1.0", + "@techmely/domain-driven": "1.1.1", "@techmely/hono": "workspace:*", "@techmely/http": "1.2.8", "@techmely/logger": "1.1.2", diff --git a/apps/web/package.json b/apps/web/package.json index 4c7ce1e7..59851b55 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -18,7 +18,7 @@ "@techmely/cache": "1.0.9", "@techmely/design-system": "workspace:*", "@techmely/hono": "workspace:*", - "@techmely/domain-driven": "1.1.0", + "@techmely/domain-driven": "1.1.1", "@techmely/logger": "1.1.2", "@techmely/metrics": "1.0.9", "@techmely/rate-limit": "2.0.2", diff --git a/bun.lockb b/bun.lockb index 27b8c89c..a517c14c 100755 Binary files a/bun.lockb and b/bun.lockb differ