From e4e993489ba675e4ddd3d8ce65450ae225fb639c Mon Sep 17 00:00:00 2001 From: oriol Date: Wed, 22 Mar 2023 22:05:17 +0100 Subject: [PATCH] network datasource providers --- .../array-network.data-source.provider.ts | 49 ++++++++++++++ .../network.data-source.provider.ts | 39 +++++++++++ .../data-source/network.data-source.ts | 25 ------- .../network-array.repository-provider.ts | 62 +++++++++++++++++ .../repository/network.repository-provider.ts | 67 +++++++++++++++++++ 5 files changed, 217 insertions(+), 25 deletions(-) create mode 100644 packages/core/src/repository/data-source/array-network.data-source.provider.ts create mode 100644 packages/core/src/repository/data-source/network.data-source.provider.ts create mode 100644 packages/core/src/repository/network-array.repository-provider.ts create mode 100644 packages/core/src/repository/network.repository-provider.ts diff --git a/packages/core/src/repository/data-source/array-network.data-source.provider.ts b/packages/core/src/repository/data-source/array-network.data-source.provider.ts new file mode 100644 index 0000000..17b91b6 --- /dev/null +++ b/packages/core/src/repository/data-source/array-network.data-source.provider.ts @@ -0,0 +1,49 @@ +import { ApiRequestService } from "./api-request.service"; +import { Type } from "../../helpers"; +import { DataSource, GetDataSource, PutDataSource } from "./data-source"; +import { NetworkDataSource } from "./network.data-source"; +import { DataSourceMapper, GetDataSourceMapper, PutDataSourceMapper } from "./data-source-mapper"; +import { ArrayMapper, BlankMapper, JsonDeserializerMapper } from "../mapper/mapper"; + +export function provideGetArrayNetworkDataSource( + requestService: ApiRequestService, + type?: Type, +): GetDataSource { + const dataSource = new NetworkDataSource(requestService); + return new GetDataSourceMapper( + dataSource, + type + ? new ArrayMapper(new JsonDeserializerMapper(type)) + : new ArrayMapper(new BlankMapper()) + ); +} + +export function providePutArrayNetworkDataSource( + requestService: ApiRequestService, + type?: Type, +): PutDataSource { + const dataSource = new NetworkDataSource(requestService); + return new PutDataSourceMapper( + dataSource, + type + ? new ArrayMapper(new JsonDeserializerMapper(type)) + : new ArrayMapper(new BlankMapper()), + new ArrayMapper(new BlankMapper()), + ); +} + +export function provideArrayNetworkDataSource( + requestService: ApiRequestService, + type?: Type, +): DataSource { + const dataSource = new NetworkDataSource(requestService); + return new DataSourceMapper( + dataSource, + dataSource, + dataSource, + type + ? new ArrayMapper(new JsonDeserializerMapper(type)) + : new ArrayMapper(new BlankMapper()), + new ArrayMapper(new BlankMapper()), + ); +} diff --git a/packages/core/src/repository/data-source/network.data-source.provider.ts b/packages/core/src/repository/data-source/network.data-source.provider.ts new file mode 100644 index 0000000..f0def74 --- /dev/null +++ b/packages/core/src/repository/data-source/network.data-source.provider.ts @@ -0,0 +1,39 @@ +import { ApiRequestService } from "./api-request.service"; +import { Type } from "../../helpers"; +import { DataSource, DeleteDataSource, GetDataSource, PutDataSource } from "./data-source"; +import { NetworkDataSource } from "./network.data-source"; +import { DataSourceMapper, GetDataSourceMapper, PutDataSourceMapper } from "./data-source-mapper"; +import { BlankMapper, JsonDeserializerMapper } from "../mapper/mapper"; + +export function provideNetworkDataSource(requestService: ApiRequestService, type?: Type): DataSource { + const dataSource = new NetworkDataSource(requestService); + return new DataSourceMapper( + dataSource, + dataSource, + dataSource, + type ? new JsonDeserializerMapper(type) : new BlankMapper(), + new BlankMapper(), + ); +} + +export function provideGetNetworkDataSource(requestService: ApiRequestService, type?: Type): GetDataSource { + const dataSource = new NetworkDataSource(requestService); + return new GetDataSourceMapper( + dataSource, + type ? new JsonDeserializerMapper(type) : new BlankMapper(), + ); +} + +export function providePutNetworkDataSource(requestService: ApiRequestService, type?: Type): PutDataSource { + const dataSource = new NetworkDataSource(requestService); + return new PutDataSourceMapper( + dataSource, + type ? new JsonDeserializerMapper(type) : new BlankMapper(), + new BlankMapper(), + ); +} + +export function provideDeleteNetworkDataSource(requestService: ApiRequestService): DeleteDataSource { + return new NetworkDataSource(requestService); +} + diff --git a/packages/core/src/repository/data-source/network.data-source.ts b/packages/core/src/repository/data-source/network.data-source.ts index a6576b4..6c84344 100644 --- a/packages/core/src/repository/data-source/network.data-source.ts +++ b/packages/core/src/repository/data-source/network.data-source.ts @@ -84,28 +84,3 @@ export class NetworkDataSource implements DataSource { throw new MethodNotImplementedError(); } } - -export function provideDefaultNetworkDataSource(requestService: ApiRequestService, type?: Type): DataSource { - const dataSource = new NetworkDataSource(requestService); - return new DataSourceMapper( - dataSource, - dataSource, - dataSource, - type ? new JsonDeserializerMapper(type) : new BlankMapper(), - new BlankMapper(), - ); -} - -export function provideDefaultArrayNetworkDataSource( - requestService: ApiRequestService, - type: Type, -): DataSource { - const dataSource = new NetworkDataSource(requestService); - return new DataSourceMapper( - dataSource, - dataSource, - dataSource, - new ArrayMapper(new JsonDeserializerMapper(type)), - new ArrayMapper(new BlankMapper()), - ); -} diff --git a/packages/core/src/repository/network-array.repository-provider.ts b/packages/core/src/repository/network-array.repository-provider.ts new file mode 100644 index 0000000..be56c7e --- /dev/null +++ b/packages/core/src/repository/network-array.repository-provider.ts @@ -0,0 +1,62 @@ +import { GetRepository, PutRepository, Repository } from "./repository"; +import { ArrayMapper, Mapper} from "./mapper/mapper"; +import { + SingleDataSourceRepository, + SingleGetDataSourceRepository, + SinglePutDataSourceRepository +} from "./single-data-source.repository"; +import { GetRepositoryMapper, PutRepositoryMapper, RepositoryMapper } from "./repository-mapper"; +import { ApiRequestService } from "./data-source/api-request.service"; +import { Type } from "../helpers"; +import { + provideArrayNetworkDataSource, + provideGetArrayNetworkDataSource, + providePutArrayNetworkDataSource +} from "./data-source/array-network.data-source.provider"; + +export function provideGetArrayNetworkRepository( + apiRequestService: ApiRequestService, + toOutMapper: Mapper, + type: Type +): GetRepository { + const networkDatasource = provideGetArrayNetworkDataSource(apiRequestService, type); + const repository = new SingleGetDataSourceRepository(networkDatasource); + return new GetRepositoryMapper(repository, new ArrayMapper(toOutMapper)); +} + +export function providePutArrayNetworkRepository( + apiRequestService: ApiRequestService, + toInMapper: Mapper, + toOutMapper: Mapper, + type: Type +): PutRepository { + const networkDatasource = providePutArrayNetworkDataSource(apiRequestService, type); + const repository = new SinglePutDataSourceRepository(networkDatasource); + return new PutRepositoryMapper( + repository, + new ArrayMapper(toOutMapper), + new ArrayMapper(toInMapper) + ); +} + +export function provideArrayNetworkRepository( + apiRequestService: ApiRequestService, + toInMapper: Mapper, + toOutMapper: Mapper, + type: Type +): Repository { + const networkDatasource = provideArrayNetworkDataSource(apiRequestService, type); + const repository = new SingleDataSourceRepository( + networkDatasource, + networkDatasource, + networkDatasource + ); + + return new RepositoryMapper( + repository, + repository, + repository, + new ArrayMapper(toOutMapper), + new ArrayMapper(toInMapper) + ); +} diff --git a/packages/core/src/repository/network.repository-provider.ts b/packages/core/src/repository/network.repository-provider.ts new file mode 100644 index 0000000..789f86e --- /dev/null +++ b/packages/core/src/repository/network.repository-provider.ts @@ -0,0 +1,67 @@ +import { DeleteRepository, GetRepository, PutRepository } from "./repository"; +import { Mapper } from "./mapper/mapper"; +import { + SingleDataSourceRepository, + SingleDeleteDataSourceRepository, + SingleGetDataSourceRepository, + SinglePutDataSourceRepository +} from "./single-data-source.repository"; +import { GetRepositoryMapper, PutRepositoryMapper, RepositoryMapper } from "./repository-mapper"; +import { ApiRequestService } from "./data-source/api-request.service"; +import { Type } from "../helpers"; +import { + provideDeleteNetworkDataSource, + provideGetNetworkDataSource, + provideNetworkDataSource, + providePutNetworkDataSource +} from "./data-source/network.data-source.provider"; + +export function provideGetNetworkRepository( + apiRequestService: ApiRequestService, + toOutMapper: Mapper, + type?: Type +): GetRepository { + const networkDatasource = provideGetNetworkDataSource(apiRequestService, type); + const repository = new SingleGetDataSourceRepository(networkDatasource); + return new GetRepositoryMapper(repository, toOutMapper); +} + +export function providePutNetworkRepository( + apiRequestService: ApiRequestService, + toInMapper: Mapper, + toOutMapper: Mapper, + type?: Type +): PutRepository { + const networkDatasource = providePutNetworkDataSource(apiRequestService, type); + const repository = new SinglePutDataSourceRepository(networkDatasource); + return new PutRepositoryMapper(repository, toOutMapper, toInMapper); +} + +export function provideDeleteNetworkRepository( + apiRequestService: ApiRequestService +): DeleteRepository { + const networkDatasource = provideDeleteNetworkDataSource(apiRequestService); + return new SingleDeleteDataSourceRepository(networkDatasource); +} + +export function provideNetworkRepository( + apiRequestService: ApiRequestService, + toInMapper: Mapper, + toOutMapper: Mapper, + type?: Type +): PutRepository { + const networkDatasource = provideNetworkDataSource(apiRequestService, type); + const repository = new SingleDataSourceRepository( + networkDatasource, + networkDatasource, + networkDatasource + ); + + return new RepositoryMapper( + repository, + repository, + repository, + toOutMapper, + toInMapper + ); +}