diff --git a/src/app/infra/repository/adapter.ts b/src/app/infra/repository/adapter.ts new file mode 100644 index 000000000..efcb51406 --- /dev/null +++ b/src/app/infra/repository/adapter.ts @@ -0,0 +1,26 @@ +import { Result } from 'neverthrow'; +import { ZodError} from 'zod'; + +// Define a type for the Result of repository operations +export type RepositoryResult = Result>; + +export abstract class IDexieRepository { + + abstract insert(document: T): Promise> + + abstract insertMany(documents: T[]): Promise>> + + abstract update(id: any, updatedDocument: Partial) : Promise> + + abstract delete(id: any): Promise> + + abstract findById(id: any) : Promise> + + abstract find(filter: Partial): Promise> + + abstract findOne(filter: Partial): Promise> + + abstract findAll(): Promise> + + abstract count(filter?: Object): Promise> +} diff --git a/src/app/infra/repository/dexie/dexie-repository.service.ts b/src/app/infra/repository/dexie/dexie-repository.service.ts index a8f40454f..71ba3f10e 100644 --- a/src/app/infra/repository/dexie/dexie-repository.service.ts +++ b/src/app/infra/repository/dexie/dexie-repository.service.ts @@ -2,11 +2,12 @@ import { Result, ok, err } from 'neverthrow'; import { EntityTable } from 'Dexie'; import { ZodError, ZodObject, ZodSchema } from 'zod'; import { Logger } from 'src/app/services/logger/main/service'; +import { IDexieRepository } from '../adapter' // Define a type for the Result of repository operations type RepositoryResult = Result>; -export class DexieRepository { +export class DexieRepository implements IDexieRepository { private table: EntityTable; private ZodSchema: ZodSchema private ZodPartialSchema: ZodSchema diff --git a/src/app/infra/repository/index.ts b/src/app/infra/repository/index.ts new file mode 100644 index 000000000..462cc2869 --- /dev/null +++ b/src/app/infra/repository/index.ts @@ -0,0 +1,2 @@ +export * from './adapter'; +// export * from './types'; diff --git a/src/app/infra/repository/types.ts b/src/app/infra/repository/types.ts new file mode 100644 index 000000000..717f1b715 --- /dev/null +++ b/src/app/infra/repository/types.ts @@ -0,0 +1,36 @@ +// export type UpdatedModel = { +// matchedCount: number; +// modifiedCount: number; +// acknowledged: boolean; +// upsertedId: unknown | any; +// upsertedCount: number; +// }; + +// export type RemovedModel = { +// deletedCount: number; +// deleted: boolean; +// }; + +// export type CreatedModel = { +// id: string; +// created: boolean; +// }; + +// export type CreatedOrUpdateModel = { +// id: string; +// created: boolean; +// updated: boolean; +// }; + +// export enum DatabaseOperationEnum { +// EQUAL = 'equal', +// NOT_EQUAL = 'not_equal', +// NOT_CONTAINS = 'not_contains', +// CONTAINS = 'contains' +// } + +// export type DatabaseOperationCommand = { +// property: keyof T; +// value: unknown[]; +// command: DatabaseOperationEnum; +// }; diff --git a/src/app/infra/repository/util.ts b/src/app/infra/repository/util.ts new file mode 100644 index 000000000..e69de29bb