From f8a1cefe11c4a00feac8aee01317bd73f1fde7e4 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Fri, 17 May 2024 17:42:34 +0200 Subject: [PATCH] OZG-5012 move resource service creation/configuration to module --- .../lib/admin-settings-resource.service.ts | 32 +++++++++ .../src/lib/admin-settings.module.ts | 22 +++++- .../src/lib/admin-settings.service.spec.ts | 69 +++++-------------- .../src/lib/admin-settings.service.ts | 37 ++-------- .../configuration-resource.service.ts | 26 +++++++ .../configuration.service.spec.ts | 41 ++++------- .../configuration/configuration.service.ts | 29 ++------ .../lib/postfach/postfach-resource.service.ts | 2 +- .../src/lib/postfach/postfach.service.ts | 6 +- .../src/lib/bescheid.service.ts | 1 + 10 files changed, 125 insertions(+), 140 deletions(-) create mode 100644 alfa-client/libs/admin-settings/src/lib/admin-settings-resource.service.ts create mode 100644 alfa-client/libs/admin-settings/src/lib/configuration/configuration-resource.service.ts diff --git a/alfa-client/libs/admin-settings/src/lib/admin-settings-resource.service.ts b/alfa-client/libs/admin-settings/src/lib/admin-settings-resource.service.ts new file mode 100644 index 0000000000..80f52d0a1e --- /dev/null +++ b/alfa-client/libs/admin-settings/src/lib/admin-settings-resource.service.ts @@ -0,0 +1,32 @@ +import { + ListResourceServiceConfig, + ResourceListService, + ResourceRepository, +} from '@alfa-client/tech-shared'; +import { Resource } from '@ngxp/rest'; +import { SettingListLinkRel } from './admin-settings.linkrel'; +import { SettingItemResource, SettingListResource } from './admin-settings.model'; +import { ConfigurationResource } from './configuration/configuration.model'; +import { ConfigurationService } from './configuration/configuration.service'; + +export class SettingListResourceService extends ResourceListService< + Resource, + SettingListResource, + SettingItemResource +> {} + +export function createSettingListResourceService( + repository: ResourceRepository, + configurationService: ConfigurationService, +) { + return new ResourceListService(buildConfig(configurationService), repository); +} +function buildConfig( + configurationService: ConfigurationService, +): ListResourceServiceConfig<ConfigurationResource> { + return { + baseResource: configurationService.get(), + createLinkRel: SettingListLinkRel.CREATE, + listLinkRel: SettingListLinkRel.LIST, + }; +} diff --git a/alfa-client/libs/admin-settings/src/lib/admin-settings.module.ts b/alfa-client/libs/admin-settings/src/lib/admin-settings.module.ts index 6cf1530cea..2825dda0c7 100644 --- a/alfa-client/libs/admin-settings/src/lib/admin-settings.module.ts +++ b/alfa-client/libs/admin-settings/src/lib/admin-settings.module.ts @@ -5,7 +5,15 @@ import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import KcAdminClient from '@keycloak/keycloak-admin-client'; +import { + SettingListResourceService, + createSettingListResourceService, +} from './admin-settings-resource.service'; import { SettingsService } from './admin-settings.service'; +import { + ConfigurationResourceService, + createConfigurationResourceService, +} from './configuration/configuration-resource.service'; import { ConfigurationService } from './configuration/configuration.service'; import { NavigationComponent } from './navigation/navigation.component'; import { OrganisationseinheitContainerComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; @@ -17,7 +25,7 @@ import { PostfachFormComponent } from './postfach/postfach-container/postfach-fo import { PostfachNavigationItemComponent } from './postfach/postfach-navigation-item/postfach-navigation-item.component'; import { PostfachResourceService, - postfachResourceServiceFactory, + createPostfachResourceService, } from './postfach/postfach-resource.service'; import { PostfachService } from './postfach/postfach.service'; import { MoreItemButtonComponent } from './shared/more-menu/more-item-button/more-item-button.component'; @@ -68,9 +76,19 @@ import { TextFieldComponent } from './shared/text-field/text-field.component'; }, { provide: PostfachResourceService, - useFactory: postfachResourceServiceFactory, + useFactory: createPostfachResourceService, deps: [ResourceRepository, SettingsService], }, + { + provide: ConfigurationResourceService, + useFactory: createConfigurationResourceService, + deps: [ResourceRepository, SettingsService], + }, + { + provide: SettingListResourceService, + useFactory: createSettingListResourceService, + deps: [ResourceRepository, ConfigurationService], + }, ], }) export class AdminSettingsModule {} diff --git a/alfa-client/libs/admin-settings/src/lib/admin-settings.service.spec.ts b/alfa-client/libs/admin-settings/src/lib/admin-settings.service.spec.ts index aef5af45a7..0dae05ec7a 100644 --- a/alfa-client/libs/admin-settings/src/lib/admin-settings.service.spec.ts +++ b/alfa-client/libs/admin-settings/src/lib/admin-settings.service.spec.ts @@ -1,69 +1,32 @@ -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import { SettingsService } from './admin-settings.service'; -import { SettingListResource } from './admin-settings.model'; import { + StateResource, createEmptyStateResource, createStateResource, - ListResourceServiceConfig, - ResourceRepository, - StateResource, } from '@alfa-client/tech-shared'; +import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { Observable, of } from 'rxjs'; -import { PostfachResource } from './postfach/postfach.model'; -import { createSettingItemResource, createPostfachResource } from '../../test/postfach/postfach'; -import { createSettingsListResource } from '../../test/admin-settings'; -import { ConfigurationService } from './configuration/configuration.service'; -import { createConfigurationResource } from '../../test/configuration/configuration'; -import { ConfigurationResource } from './configuration/configuration.model'; import { singleCold } from '../../../tech-shared/test/marbles'; -import { SettingListLinkRel } from './admin-settings.linkrel'; +import { createSettingsListResource } from '../../test/admin-settings'; +import { createPostfachResource, createSettingItemResource } from '../../test/postfach/postfach'; +import { SettingListResourceService } from './admin-settings-resource.service'; +import { SettingListResource } from './admin-settings.model'; +import { SettingsService } from './admin-settings.service'; +import { PostfachResource } from './postfach/postfach.model'; describe('SettingsService', () => { let service: SettingsService; - let configurationService: Mock<ConfigurationService>; - let repository: Mock<ResourceRepository>; - - const configurationStateResource$: Observable<StateResource<ConfigurationResource>> = of( - createStateResource(createConfigurationResource()), - ); + let settingListResourceService: Mock<SettingListResourceService>; beforeEach(() => { - configurationService = mock(ConfigurationService); - configurationService.getConfigurationResource.mockReturnValue(configurationStateResource$); - - repository = mock(ResourceRepository); + settingListResourceService = mock(SettingListResourceService); - service = new SettingsService(useFromMock(configurationService), useFromMock(repository)); + service = new SettingsService(useFromMock(settingListResourceService)); }); it('should create', () => { expect(service).toBeTruthy(); }); - it('should create resourceService', () => { - expect(service.resourceService).toBeTruthy(); - }); - - describe('build config', () => { - it('should have baseResource', () => { - const config: ListResourceServiceConfig<ConfigurationResource> = service.buildConfig(); - - expect(config.baseResource).toBe(configurationStateResource$); - }); - - it('should have createLinkRel', () => { - const config: ListResourceServiceConfig<ConfigurationResource> = service.buildConfig(); - - expect(config.createLinkRel).toBe(SettingListLinkRel.CREATE); - }); - - it('should have istLinKRel', () => { - const config: ListResourceServiceConfig<ConfigurationResource> = service.buildConfig(); - - expect(config.listLinkRel).toBe(SettingListLinkRel.LIST); - }); - }); - describe('get Postfach', () => { const postfachResource = createPostfachResource(); const postfachStateResource: StateResource<PostfachResource> = @@ -73,13 +36,13 @@ describe('SettingsService', () => { ); beforeEach(() => { - service.resourceService.getList = jest.fn().mockReturnValue(of(settingsListResource)); + settingListResourceService.getList = jest.fn().mockReturnValue(of(settingsListResource)); }); it('should call resource service', () => { service.getPostfach(); - expect(service.resourceService.getList).toHaveBeenCalled(); + expect(settingListResourceService.getList).toHaveBeenCalled(); }); it('should return null for non postfach resource', () => { @@ -87,7 +50,7 @@ describe('SettingsService', () => { createSettingsListResource([createSettingItemResource()]), ); - service.resourceService.getList = jest + settingListResourceService.getList = jest .fn() .mockReturnValue(singleCold(emptySettingsListResource)); @@ -96,7 +59,9 @@ describe('SettingsService', () => { }); it('should return item resource as postfach resource', () => { - service.resourceService.getList = jest.fn().mockReturnValue(singleCold(settingsListResource)); + settingListResourceService.getList = jest + .fn() + .mockReturnValue(singleCold(settingsListResource)); const postfach: Observable<StateResource<PostfachResource>> = service.getPostfach(); diff --git a/alfa-client/libs/admin-settings/src/lib/admin-settings.service.ts b/alfa-client/libs/admin-settings/src/lib/admin-settings.service.ts index d87daa538d..10697e4a4b 100644 --- a/alfa-client/libs/admin-settings/src/lib/admin-settings.service.ts +++ b/alfa-client/libs/admin-settings/src/lib/admin-settings.service.ts @@ -1,40 +1,15 @@ -import { Injectable } from '@angular/core'; -import { ResourceListService } from 'libs/tech-shared/src/lib/resource/list-resource.service'; -import { SettingItemResource, SettingListResource } from './admin-settings.model'; -import { ResourceRepository } from 'libs/tech-shared/src/lib/resource/resource.repository'; -import { ListResourceServiceConfig } from 'libs/tech-shared/src/lib/resource/resource.model'; -import { map, Observable } from 'rxjs'; import { StateResource } from '@alfa-client/tech-shared'; -import { PostfachResource } from './postfach/postfach.model'; -import { ConfigurationService } from './configuration/configuration.service'; -import { ConfigurationResource } from './configuration/configuration.model'; +import { Injectable } from '@angular/core'; +import { Observable, map } from 'rxjs'; +import { SettingListResourceService } from './admin-settings-resource.service'; import { getPostfachResource } from './admin-settings.util'; -import { SettingListLinkRel } from './admin-settings.linkrel'; +import { PostfachResource } from './postfach/postfach.model'; @Injectable() export class SettingsService { - resourceService: ResourceListService< - ConfigurationResource, - SettingListResource, - SettingItemResource - >; - - constructor( - private configurationService: ConfigurationService, - repository: ResourceRepository, - ) { - this.resourceService = new ResourceListService(this.buildConfig(), repository); - } - - buildConfig(): ListResourceServiceConfig<ConfigurationResource> { - return { - baseResource: this.configurationService.getConfigurationResource(), - createLinkRel: SettingListLinkRel.CREATE, - listLinkRel: SettingListLinkRel.LIST, - }; - } + constructor(private settingListResourceService: SettingListResourceService) {} public getPostfach(): Observable<StateResource<PostfachResource>> { - return this.resourceService.getList().pipe(map(getPostfachResource)); + return this.settingListResourceService.getList().pipe(map(getPostfachResource)); } } diff --git a/alfa-client/libs/admin-settings/src/lib/configuration/configuration-resource.service.ts b/alfa-client/libs/admin-settings/src/lib/configuration/configuration-resource.service.ts new file mode 100644 index 0000000000..f73458583b --- /dev/null +++ b/alfa-client/libs/admin-settings/src/lib/configuration/configuration-resource.service.ts @@ -0,0 +1,26 @@ +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { + ApiResourceService, + ResourceRepository, + ResourceServiceConfig, +} from '@alfa-client/tech-shared'; +import { ConfigurationResource } from './configuration.model'; + +export class ConfigurationResourceService extends ApiResourceService< + ApiRootResource, + ConfigurationResource +> {} + +export function createConfigurationResourceService( + repository: ResourceRepository, + apiRootService: ApiRootService, +) { + return new ApiResourceService(buildConfig(apiRootService), repository); +} + +function buildConfig(apiRootService: ApiRootService): ResourceServiceConfig<ApiRootResource> { + return { + resource: apiRootService.getApiRoot(), + getLinkRel: ApiRootLinkRel.CONFIGURATION, + }; +} diff --git a/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.spec.ts b/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.spec.ts index 0df242498f..df7a4250f9 100644 --- a/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.spec.ts +++ b/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.spec.ts @@ -1,60 +1,47 @@ -import { ApiRootService, ApiRootResource } from '@alfa-client/api-root-shared'; -import { ResourceRepository, StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { StateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { Observable, of } from 'rxjs'; -import { ConfigurationResource } from './configuration.model'; -import { ConfigurationService } from './configuration.service'; +import { Observable } from 'rxjs'; import { singleCold, singleHot } from '../../../../tech-shared/test/marbles'; import { createConfigurationResource } from '../../../test/configuration/configuration'; +import { ConfigurationResourceService } from './configuration-resource.service'; +import { ConfigurationResource } from './configuration.model'; +import { ConfigurationService } from './configuration.service'; describe('ConfigurationService', () => { let service: ConfigurationService; - let apiRootService: Mock<ApiRootService>; - let repository: Mock<ResourceRepository>; - - const apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of( - createStateResource(createApiRootResource()), - ); + let configurationResourceService: Mock<ConfigurationResourceService>; beforeEach(() => { - apiRootService = mock(ApiRootService); - apiRootService.getApiRoot.mockReturnValue(apiRootStateResource$); - - repository = mock(ResourceRepository); + configurationResourceService = mock(ConfigurationResourceService); - service = new ConfigurationService(useFromMock(apiRootService), useFromMock(repository)); + service = new ConfigurationService(useFromMock(configurationResourceService)); }); it('should create', () => { expect(service).toBeTruthy(); }); - it('should create resourceService', () => { - expect(service.resourceService).toBeTruthy(); - }); - - describe('get configuration resource', () => { + describe('get', () => { const configurationResource: ConfigurationResource = createConfigurationResource(); const configurationStateResource: StateResource<ConfigurationResource> = createStateResource(configurationResource); beforeEach(() => { - service.resourceService.get = jest + configurationResourceService.get = jest .fn() .mockReturnValue(singleHot(configurationStateResource)); }); it('should call resourceService', () => { - service.resourceService.get = jest.fn(); + configurationResourceService.get = jest.fn(); - service.getConfigurationResource(); + service.get(); - expect(service.resourceService.get).toHaveBeenCalled(); + expect(configurationResourceService.get).toHaveBeenCalled(); }); it('should return value', () => { const loadedConfigurationResource: Observable<StateResource<ConfigurationResource>> = - service.getConfigurationResource(); + service.get(); expect(loadedConfigurationResource).toBeObservable(singleCold(configurationStateResource)); }); diff --git a/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.ts b/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.ts index a05704eabd..6c0ed41b4b 100644 --- a/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.ts +++ b/alfa-client/libs/admin-settings/src/lib/configuration/configuration.service.ts @@ -1,33 +1,14 @@ -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { - ApiResourceService, - ResourceRepository, - ResourceServiceConfig, - StateResource, -} from '@alfa-client/tech-shared'; +import { StateResource } from '@alfa-client/tech-shared'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; +import { ConfigurationResourceService } from './configuration-resource.service'; import { ConfigurationResource } from './configuration.model'; @Injectable() export class ConfigurationService { - resourceService: ApiResourceService<ApiRootResource, ConfigurationResource>; + constructor(private configurationResourceService: ConfigurationResourceService) {} - constructor( - private apiRootService: ApiRootService, - repository: ResourceRepository, - ) { - this.resourceService = new ApiResourceService(this.buildConfig(), repository); - } - - buildConfig(): ResourceServiceConfig<ApiRootResource> { - return { - resource: this.apiRootService.getApiRoot(), - getLinkRel: ApiRootLinkRel.CONFIGURATION, - }; - } - - public getConfigurationResource(): Observable<StateResource<ConfigurationResource>> { - return this.resourceService.get(); + public get(): Observable<StateResource<ConfigurationResource>> { + return this.configurationResourceService.get(); } } diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-resource.service.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-resource.service.ts index 4f84f805d1..07f664fc22 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach-resource.service.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach-resource.service.ts @@ -12,7 +12,7 @@ export class PostfachResourceService extends ApiResourceService< PostfachResource > {} -export function postfachResourceServiceFactory( +export function createPostfachResourceService( repository: ResourceRepository, settingService: SettingsService, ) { diff --git a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts index 4aaad195e8..24eb2f3b5b 100644 --- a/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts +++ b/alfa-client/libs/admin-settings/src/lib/postfach/postfach.service.ts @@ -7,14 +7,14 @@ import { Postfach, PostfachResource, PostfachSettingsItem } from './postfach.mod @Injectable() export class PostfachService { - constructor(private resourceService: PostfachResourceService) {} + constructor(private postfachResourceService: PostfachResourceService) {} public get(): Observable<StateResource<PostfachResource>> { - return this.resourceService.get(); + return this.postfachResourceService.get(); } public save(postfach: Postfach): Observable<StateResource<PostfachResource | HttpError>> { - return this.resourceService.save(this.buildPostfachSettingItem(postfach)); + return this.postfachResourceService.save(this.buildPostfachSettingItem(postfach)); } private buildPostfachSettingItem(postfach: Postfach): PostfachSettingsItem { diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts index adc5321126..2a1800665c 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -123,6 +123,7 @@ export class BescheidService { resource: this.vorgangService.getVorgangWithEingang(), getLinkRel: VorgangWithEingangLinkRel.BESCHEID_DRAFT, delete: { linkRel: BescheidLinkRel.DELETE, order: CommandOrder.DELETE_BESCHEID }, + edit: { linkRel: BescheidLinkRel.UPDATE, order: CommandOrder.UPDATE_BESCHEID }, }; } -- GitLab