Untitled
unknown
plain_text
8 months ago
6.5 kB
8
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