From 7a85f8f1c5b11ea3b05d8dce78af9f1f8721ce3d Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Tue, 27 Aug 2024 09:38:52 +0100 Subject: [PATCH] add interface to generic pattern --- src/app/infra/repository/adapter.ts | 26 ++++++++++++++ .../dexie/dexie-repository.service.ts | 3 +- src/app/infra/repository/index.ts | 2 ++ src/app/infra/repository/types.ts | 36 +++++++++++++++++++ src/app/infra/repository/util.ts | 0 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/app/infra/repository/adapter.ts create mode 100644 src/app/infra/repository/index.ts create mode 100644 src/app/infra/repository/types.ts create mode 100644 src/app/infra/repository/util.ts 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