{"version":3,"file":"base.repository-C4Ebz5lr.cjs","names":[],"sources":["../src/domain/base.repository.ts"],"sourcesContent":["import type { Result } from \"@carbonteq/fp\";\nimport type { BaseEntity } from \"../domain/base.entity.ts\";\nimport type {\n  AlreadyExistsError,\n  InvalidOperation,\n  NotFoundError,\n} from \"../domain/base.errors.ts\";\nimport type { Paginated, PaginationOptions } from \"../domain/pagination.ts\";\n\nexport type RepositoryError =\n  | NotFoundError\n  | AlreadyExistsError\n  | InvalidOperation;\n\ntype CommonRepoErrors = InvalidOperation;\n\nexport type RepositoryResult<T, E = CommonRepoErrors> = Result<\n  T,\n  E | CommonRepoErrors\n>;\n\nexport abstract class BaseRepository<T extends BaseEntity> {\n  abstract insert(entity: T): Promise<RepositoryResult<T, AlreadyExistsError>>;\n  abstract update(entity: T): Promise<RepositoryResult<T, NotFoundError>>;\n\n  fetchAll?(): Promise<RepositoryResult<T[]>>;\n  fetchPaginated?(\n    options: PaginationOptions,\n  ): Promise<RepositoryResult<Paginated<T>>>;\n  fetchById?(id: BaseEntity[\"id\"]): Promise<RepositoryResult<T, NotFoundError>>;\n  deleteById?(\n    Id: BaseEntity[\"id\"],\n  ): Promise<RepositoryResult<T, NotFoundError>>;\n  fetchBy?<U extends keyof T>(\n    prop: U,\n    val: T[U],\n  ): Promise<RepositoryResult<T, NotFoundError>>; // val: ValueForProp<T, U>\n  existsBy?<U extends keyof T>(\n    prop: U,\n    val: T[U],\n  ): Promise<RepositoryResult<boolean>>;\n  deleteBy?<U extends keyof T>(\n    prop: U,\n    val: T[U],\n  ): Promise<RepositoryResult<T, NotFoundError>>;\n}\n"],"mappings":";;;AAqBA,IAAsB,iBAAtB,MAA2D,CAwB1D"}