Untitled
unknown
plain_text
2 months ago
6.5 kB
7
Indexable
import { Injectable } from '@nestjs/common'; import { ZgApiLogger } from '@ziwig/nest-core'; import { Error, PaginationOptions, PaginationResult, UseCase, } from '@ziwig/types'; import { IDomain } from 'apps/my-api/src/domains/_business/domain/domain.model'; import { DomainService } from 'apps/my-api/src/domains/_business/domain/domain.service'; import { IDomainConfigTrait } from 'apps/my-api/src/domains/_business/domain-config-trait/domain-config-trait.model'; import { SearchDomainRequestDTO } from '../../../domains/_use-cases/get-domains/request.dto'; @Injectable() export class GetWorklistConfigUseCase implements UseCase< SearchDomainRequestDTO & PaginationOptions, Promise< | { name: string; type?: string; wording_en: string; wording_fr: string; group: string; }[] | Error > > { constructor( private readonly domainService: DomainService, private readonly logger: ZgApiLogger, ) { this.logger.context = GetWorklistConfigUseCase.name; } async run(data: SearchDomainRequestDTO & PaginationOptions): Promise< | { group: string; name: string; type?: string; wording_en: string; wording_fr: string; }[] | Error > { const logCtx = this.run.name; this.logger.info(`Get worklist config initiated`, logCtx); this.logger.info(`Getting domains`, logCtx); if (data?.oid === 'clinique') return [ { group: 'centers', name: 'sector', wording_en: 'Sector', wording_fr: 'Filière', }, { group: 'centers', name: 'id', wording_en: 'Id', wording_fr: 'Id', }, { group: 'centers', name: 'id_unite', wording_en: 'Center Id', wording_fr: 'Id Centre', }, { group: 'centers', name: 'name', wording_en: 'Center Name', wording_fr: 'Nom du centre', }, { group: 'centers', name: 'level', wording_en: 'Level', wording_fr: 'Niveau', }, { group: 'centers', name: 'phone', wording_en: 'Phone Number', wording_fr: 'Numéro de téléphone', }, { group: 'centers', name: 'email', wording_en: 'Email', wording_fr: 'Email', }, { group: 'centers', name: 'status', type: 'icon', wording_en: 'Status', wording_fr: 'Etat', }, ]; const result = await this.domainService.getDomains(data); const value = result.getValue() as PaginationResult<IDomain> | IDomain[]; if (result?.isFailure) { throw result?.getValue() as Error; } else { let domains: IDomain[] = []; if (data?.oid == 'identities vigilance' || data?.oid == 'identities') domains = value as IDomain[]; else domains = (value as PaginationResult<IDomain>).data; let worklistConfigTraits = []; for (const domain of domains) { worklistConfigTraits = [ ...worklistConfigTraits, ...(domain?.config?.traits?.map((element: IDomainConfigTrait) => { if ( worklistConfigTraits?.some((conf) => element.trait.id == conf?.id) ) return undefined; return { group: element.type, name: element.trait.label?.label, wording_en: ( element.trait.label?.translations['en-US'] || '' )?.toLowerCase(), wording_fr: ( element.trait.label?.translations['fr-FR'] || '' )?.toLowerCase(), id: element.trait.id, }; }) || []), ]; } return [ ...worklistConfigTraits, { group: 'indicators', name: 'indicator', wording_en: 'indicator', wording_fr: 'indicateur', }, { group: 'score', name: 'score', wording_en: 'score', wording_fr: 'score', }, { group: 'version', name: 'version', wording_en: 'version', wording_fr: 'version', }, { group: 'IPP', name: 'IPP', wording_en: 'IPP', wording_fr: 'IPP', }, { name: 'state', group: 'State', type: 'icon', wording_en: 'state', wording_fr: 'état', }, { name: 'dossier', group: 'Dossier', type: 'icon', wording_en: 'folder', wording_fr: 'dossier', }, { group: 'care-circle', name: 'name', wording_en: 'name', wording_fr: 'nom', }, { group: 'care-circle', wording: 'Profession/Spécialité', name: 'properties.profession.label', wording_en: 'profession', wording_fr: 'profession', }, { group: 'care-circle', name: 'phone', wording_en: 'phone', wording_fr: 'numéro de téléphone', }, { group: 'care-circle', name: 'email', wording_en: 'email', wording_fr: 'email', }, { group: 'care-circle', name: 'role', type: 'dropDown', wording_en: 'role', wording_fr: 'rôle', }, { group: 'care-circle', name: 'indicators', type: 'icon', wording_en: 'indicator', wording_fr: 'indicateur', }, { group: 'pseudonym', name: 'pseudonym', wording_en: 'pseudonym', wording_fr: 'pseudonyme', }, ] ?.filter((element) => element) ?.map(({ group, name, type, wording_fr, wording_en }) => ({ group, name, wording_en, wording_fr, type, })); } } }
Editor is loading...
Leave a Comment