diff --git a/src/data/repositories/ConfigD2Repository.ts b/src/data/repositories/ConfigD2Repository.ts index ce5f19df..6fc5db03 100644 --- a/src/data/repositories/ConfigD2Repository.ts +++ b/src/data/repositories/ConfigD2Repository.ts @@ -1,11 +1,11 @@ import { apiToFuture } from "$/data/api-futures"; import { metadataCodes } from "$/data/repositories/D2ApiMetadata"; import { Config, UserGroup } from "$/domain/entities/Config"; -import { Region } from "$/domain/entities/Region"; +import { Project } from "$/domain/entities/Project"; +import { Region, extractRegionCode } from "$/domain/entities/Region"; import { Future, FutureData } from "$/domain/entities/generic/Future"; import { ConfigRepository } from "$/domain/repositories/ConfigRepository"; import { D2Api } from "$/types/d2-api"; -import { extractFirstTwoLetters, extractPrefix } from "$/utils/string"; export class ConfigD2Repository implements ConfigRepository { constructor(private api: D2Api) {} @@ -45,7 +45,7 @@ export class ConfigD2Repository implements ConfigRepository { id: region.id, name: region.name, // org. unit code includes the region code in the first two letters before the underscore - code: extractFirstTwoLetters(region.code), + code: Project.extractCode(region.code), })); }); } @@ -61,7 +61,7 @@ export class ConfigD2Repository implements ConfigRepository { id: d2UserGroup.id, name: d2UserGroup.name, // user group name includes the region code in the first two letters - code: extractPrefix(d2UserGroup.name), + code: extractRegionCode(d2UserGroup.name), })); }); } diff --git a/src/domain/entities/DataSet.ts b/src/domain/entities/DataSet.ts index 2a769cc3..590e0bdf 100644 --- a/src/domain/entities/DataSet.ts +++ b/src/domain/entities/DataSet.ts @@ -10,7 +10,7 @@ import { validateOrgUnits, validateRequired } from "$/domain/entities/generic/Va import { Indicator } from "$/domain/entities/Indicator"; import { Config, UserGroup } from "$/domain/entities/Config"; import { DataSetToSave } from "$/domain/entities/DataSetToSave"; -import { extractFirstTwoLetters, extractPrefix } from "$/utils/string"; +import { extractRegionCode } from "$/domain/entities/Region"; export type DataSetAttrs = { created: ISODateString; @@ -133,7 +133,7 @@ export class DataSet extends Struct() { getRegionCodesFromAccess(): string[] { return _(this.access) .filter(access => access.type === "groups") - .compactMap(access => extractPrefix(access.name)) + .compactMap(access => Project.extractCode(access.name)) .uniq() .value(); } @@ -184,7 +184,7 @@ export class DataSet extends Struct() { } private getAccessFromOrgUnits(orgUnits: OrgUnit[], config: Config): AccessData[] { - const orgsUnitsCodes = orgUnits.map(orgUnit => extractFirstTwoLetters(orgUnit.code)); + const orgsUnitsCodes = orgUnits.map(orgUnit => extractRegionCode(orgUnit.code)); const regions = config.regions.filter(region => orgsUnitsCodes.includes(region.code)); const regionsCodes = regions.map(region => region.code); @@ -198,7 +198,7 @@ export class DataSet extends Struct() { private getAccessFromProject(project: Maybe, config: Config): AccessData[] { if (!project || !project.code) return []; - const regionCode = extractFirstTwoLetters(project.code); + const regionCode = extractRegionCode(project.code); const region = config.regions.find(region => region.code === regionCode); const userGroups = config.userGroups.filter(userGroup => userGroup.code === region?.code); diff --git a/src/domain/entities/Project.ts b/src/domain/entities/Project.ts index 0f9580e5..4992eb18 100644 --- a/src/domain/entities/Project.ts +++ b/src/domain/entities/Project.ts @@ -30,4 +30,17 @@ export class Project extends Struct() { static setDataSets(project: ProjectAttrs, dataSets: DataSet[]): Project { return Project.build({ ...project, dataSets }); } + + /** + * Extracts the portion of a code string before the first underscore ("_") + * and converts it to uppercase. + * + * Example: + * Input: "us_region" + * Output: "US" + * + */ + static extractCode(value: string): string { + return (value.split("_")[0] || "").toUpperCase(); + } } diff --git a/src/domain/entities/Region.ts b/src/domain/entities/Region.ts index a0c597c8..35d07872 100644 --- a/src/domain/entities/Region.ts +++ b/src/domain/entities/Region.ts @@ -1,3 +1,17 @@ import { NamedCodeRef } from "$/domain/entities/Ref"; export type Region = NamedCodeRef; + +/** + * Extracts the first two characters of a string and convert it to uppercase. + * If the input string is empty, returns an empty string. + * + * Example: + * Input: "us123" + * Output: "US" + * + */ + +export function extractRegionCode(value: string): string { + return (value.slice(0, 2) || "").toUpperCase(); +} diff --git a/src/utils/string.ts b/src/utils/string.ts deleted file mode 100644 index 0469d84d..00000000 --- a/src/utils/string.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Extracts the first two characters of a string and convert it to uppercase. - * If the input string is empty, returns an empty string. - * - * Example: - * Input: "us123" - * Output: "US" - * - */ - -export function extractFirstTwoLetters(value: string): string { - return (value.slice(0, 2) || "").toUpperCase(); -} - -/** - * Extracts the portion of a code string before the first underscore ("_") - * and converts it to uppercase. - * - * Example: - * Input: "us_region" - * Output: "US" - * - */ -export function extractPrefix(value: string): string { - return (value.split("_")[0] || "").toUpperCase(); -}