From 0088dcc2f536955b05643c0698511665aa1df590 Mon Sep 17 00:00:00 2001 From: addison Date: Mon, 1 Nov 2021 12:50:28 -0400 Subject: [PATCH] [refactor] Create helper services for managing organization and provider state data --- .../src/abstractions/organization.service.ts | 10 +++++ common/src/abstractions/provider.service.ts | 9 ++++ common/src/services/organization.service.ts | 44 +++++++++++++++++++ common/src/services/provider.service.ts | 35 +++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 common/src/abstractions/organization.service.ts create mode 100644 common/src/abstractions/provider.service.ts create mode 100644 common/src/services/organization.service.ts create mode 100644 common/src/services/provider.service.ts diff --git a/common/src/abstractions/organization.service.ts b/common/src/abstractions/organization.service.ts new file mode 100644 index 00000000..1cde32f7 --- /dev/null +++ b/common/src/abstractions/organization.service.ts @@ -0,0 +1,10 @@ +import { OrganizationData } from '../models/data/organizationData'; + +import { Organization } from '../models/domain/organization'; + +export abstract class OrganizationService { + get: (id: string) => Promise; + getByIdentifier: (identifier: string) => Promise; + getAll: () => Promise; + save: (orgs: {[id: string]: OrganizationData}) => Promise; +} diff --git a/common/src/abstractions/provider.service.ts b/common/src/abstractions/provider.service.ts new file mode 100644 index 00000000..e3ca5625 --- /dev/null +++ b/common/src/abstractions/provider.service.ts @@ -0,0 +1,9 @@ +import { ProviderData } from '../models/data/providerData'; + +import { Provider } from '../models/domain/provider'; + +export abstract class ProviderService { + get: (id: string) => Promise; + getAll: () => Promise; + save: (providers: {[id: string]: ProviderData}) => Promise; +} diff --git a/common/src/services/organization.service.ts b/common/src/services/organization.service.ts new file mode 100644 index 00000000..5f9c0cee --- /dev/null +++ b/common/src/services/organization.service.ts @@ -0,0 +1,44 @@ +import { OrganizationService as OrganizationServiceAbstraction } from '../abstractions/organization.service'; +import { StateService } from '../abstractions/state.service'; + +import { OrganizationData } from '../models/data/organizationData'; + +import { Organization } from '../models/domain/organization'; + +export class OrganizationService implements OrganizationServiceAbstraction { + constructor(private stateService: StateService) { + } + + async get(id: string): Promise { + const organizations = await this.stateService.getOrganizations(); + if (organizations == null || !organizations.hasOwnProperty(id)) { + return null; + } + + return new Organization(organizations[id]); + } + + async getByIdentifier(identifier: string): Promise { + const organizations = await this.getAll(); + if (organizations == null || organizations.length === 0) { + return null; + } + + return organizations.find(o => o.identifier === identifier); + } + + async getAll(): Promise { + const organizations = await this.stateService.getOrganizations(); + const response: Organization[] = []; + for (const id in organizations) { + if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) { + response.push(new Organization(organizations[id])); + } + } + return response; + } + + async save(organizations: {[id: string]: OrganizationData}) { + return await this.stateService.setOrganizations(organizations); + } +} diff --git a/common/src/services/provider.service.ts b/common/src/services/provider.service.ts new file mode 100644 index 00000000..9e1f5602 --- /dev/null +++ b/common/src/services/provider.service.ts @@ -0,0 +1,35 @@ +import { ProviderService as ProviderServiceAbstraction } from '../abstractions/provider.service'; +import { StateService } from '../abstractions/state.service'; + +import { ProviderData } from '../models/data/providerData'; + +import { Provider } from '../models/domain/provider'; + +export class ProviderService implements ProviderServiceAbstraction { + constructor(private stateService: StateService) { + } + + async get(id: string): Promise { + const providers = await this.stateService.getProviders(); + if (providers == null || !providers.hasOwnProperty(id)) { + return null; + } + + return new Provider(providers[id]); + } + + async getAll(): Promise { + const providers = await this.stateService.getProviders(); + const response: Provider[] = []; + for (const id in providers) { + if (providers.hasOwnProperty(id)) { + response.push(new Provider(providers[id])); + } + } + return response; + } + + async save(providers: { [id: string]: ProviderData; }) { + await this.stateService.setProviders(providers); + } +}