{"version":3,"file":"mock.repository-B0LuikyE.cjs","names":["entityId: BaseEntity[\"id\"]","Id: T[\"id\"]","res: Result<GetSerialized<T>, MockNotFoundError>","entity: T","res: Result<T, AlreadyExistsError>","options: PaginationOptions","res: Result<T, MockNotFoundError>"],"sources":["../src/infra/db/mock.repository.ts"],"sourcesContent":["import type { BaseEntity } from \"@/domain/base.entity.js\";\nimport { AlreadyExistsError, NotFoundError } from \"@/domain/base.errors.js\";\nimport {\n  BaseRepository,\n  type RepositoryResult,\n} from \"@/domain/base.repository.js\";\nimport {\n  type Paginated,\n  type PaginationOptions,\n  Paginator,\n} from \"@/domain/pagination.js\";\nimport { Result } from \"@carbonteq/fp\";\n\nexport class MockNotFoundError extends NotFoundError {\n  constructor(entityId: BaseEntity[\"id\"]) {\n    super(`entity with ID<${entityId}> not found by mock repository`);\n  }\n}\n\nexport class MockAlreadyExistsError extends AlreadyExistsError {\n  constructor(entityId: BaseEntity[\"id\"]) {\n    super(`entity with ID<${entityId}> already exists in mock repository`);\n  }\n}\n\ntype GetSerialized<Ent extends BaseEntity> = ReturnType<Ent[\"serialize\"]>;\n\nexport abstract class MockRepository<\n  T extends BaseEntity,\n> extends BaseRepository<T> {\n  db: Map<T[\"id\"], GetSerialized<T>>;\n\n  protected constructor() {\n    super();\n    this.db = new Map();\n  }\n\n  fetchById(Id: T[\"id\"]): Promise<RepositoryResult<T, MockNotFoundError>> {\n    const optEnt = this.db.get(Id);\n    let res: Result<GetSerialized<T>, MockNotFoundError>;\n\n    if (optEnt) {\n      res = Result.Ok(optEnt);\n    } else {\n      res = Result.Err(new MockNotFoundError(Id));\n    }\n\n    return Promise.resolve(res);\n  }\n\n  fetchAll(): Promise<RepositoryResult<T[]>> {\n    return Promise.resolve(Result.Ok(Array.from(this.db.values())));\n  }\n\n  insert(entity: T): Promise<RepositoryResult<T, MockAlreadyExistsError>> {\n    let res: Result<T, AlreadyExistsError>;\n\n    if (this.db.has(entity.id)) {\n      res = Result.Err(new MockAlreadyExistsError(entity.id));\n    } else {\n      this.db.set(entity.id, entity.serialize());\n      res = Result.Ok(entity);\n    }\n\n    return Promise.resolve(res);\n  }\n\n  fetchPaginated(\n    options: PaginationOptions,\n  ): Promise<RepositoryResult<Paginated<T>>> {\n    const all = Array.from(this.db.values());\n\n    return Promise.resolve(Result.Ok(Paginator.paginate(all, options)));\n  }\n\n  update(entity: T): Promise<RepositoryResult<T, MockNotFoundError>> {\n    let res: Result<T, MockNotFoundError>;\n\n    if (this.db.has(entity.id)) {\n      this.db.set(entity.id, entity.serialize());\n      res = Result.Ok(entity);\n    } else {\n      res = Result.Err(new MockNotFoundError(entity.id));\n    }\n\n    return Promise.resolve(res);\n  }\n\n  async deleteById(\n    Id: T[\"id\"],\n  ): Promise<RepositoryResult<T, MockNotFoundError>> {\n    const res = await this.fetchById(Id);\n\n    if (res.isOk()) {\n      this.db.delete(Id);\n    }\n\n    return res;\n  }\n\n  existsById(Id: T[\"id\"]): Promise<RepositoryResult<boolean>> {\n    return Promise.resolve(Result.Ok(this.db.has(Id)));\n  }\n}\n"],"mappings":";;;;;;;;AAaA,IAAa,oBAAb,cAAuC,kCAAc;CACnD,YAAYA,UAA4B;AACtC,SAAO,iBAAiB,SAAS,gCAAgC;CAClE;AACF;AAED,IAAa,yBAAb,cAA4C,uCAAmB;CAC7D,YAAYA,UAA4B;AACtC,SAAO,iBAAiB,SAAS,qCAAqC;CACvE;AACF;AAID,IAAsB,iBAAtB,cAEU,uCAAkB;CAG1B,cAAwB;AACtB,SAAO;AACP,OAAK,KAAK,IAAI;CACf;CAED,UAAUC,IAA8D;EACtE,MAAM,SAAS,KAAK,GAAG,IAAI,GAAG;EAC9B,IAAIC;AAEJ,MAAI,OACF,OAAM,sBAAO,GAAG,OAAO;MAEvB,OAAM,sBAAO,IAAI,IAAI,kBAAkB,IAAI;AAG7C,SAAO,QAAQ,QAAQ,IAAI;CAC5B;CAED,WAA2C;AACzC,SAAO,QAAQ,QAAQ,sBAAO,GAAG,MAAM,KAAK,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;CAChE;CAED,OAAOC,QAAiE;EACtE,IAAIC;AAEJ,MAAI,KAAK,GAAG,IAAI,OAAO,GAAG,CACxB,OAAM,sBAAO,IAAI,IAAI,uBAAuB,OAAO,IAAI;OAClD;AACL,QAAK,GAAG,IAAI,OAAO,IAAI,OAAO,WAAW,CAAC;AAC1C,SAAM,sBAAO,GAAG,OAAO;EACxB;AAED,SAAO,QAAQ,QAAQ,IAAI;CAC5B;CAED,eACEC,SACyC;EACzC,MAAM,MAAM,MAAM,KAAK,KAAK,GAAG,QAAQ,CAAC;AAExC,SAAO,QAAQ,QAAQ,sBAAO,GAAG,6BAAU,SAAS,KAAK,QAAQ,CAAC,CAAC;CACpE;CAED,OAAOF,QAA4D;EACjE,IAAIG;AAEJ,MAAI,KAAK,GAAG,IAAI,OAAO,GAAG,EAAE;AAC1B,QAAK,GAAG,IAAI,OAAO,IAAI,OAAO,WAAW,CAAC;AAC1C,SAAM,sBAAO,GAAG,OAAO;EACxB,MACC,OAAM,sBAAO,IAAI,IAAI,kBAAkB,OAAO,IAAI;AAGpD,SAAO,QAAQ,QAAQ,IAAI;CAC5B;CAED,MAAM,WACJL,IACiD;EACjD,MAAM,MAAM,MAAM,KAAK,UAAU,GAAG;AAEpC,MAAI,IAAI,MAAM,CACZ,MAAK,GAAG,OAAO,GAAG;AAGpB,SAAO;CACR;CAED,WAAWA,IAAiD;AAC1D,SAAO,QAAQ,QAAQ,sBAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;CACnD;AACF"}