/* eslint-disable prefer-const */ /* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable unused-imports/no-unused-vars */ /* eslint-disable no-console */ import type { DomainType } from "@/@types/types/domain.types"; import type { ModuleType } from "@/@types/types/module.types"; import type { Operation } from "@/@types/types/operation.types"; import type { PermissionType } from "@/@types/types/permission.types"; import type { IPermission, PermissionFieldType, } from "@/models/permission.model"; export const PermissionAdapter = ( permissionPath: string, type: keyof typeof PermissionType, ): IPermission => { let [_project, splittedDomain, splittedModule, splittedOperation] = permissionPath.split("."); if (splittedOperation === "*") { // Because of unstable api response splittedOperation = splittedModule; splittedModule = "*"; } function getDomainType( domain: string, ): PermissionFieldType { switch (domain) { case "B2E": return "B2E"; case "B2C": return "B2C"; case "*": return "all"; default: console.log("Invalid domain type"); return "none"; } } function getModuleType( module: string, ): PermissionFieldType { switch (module) { case "Flight": return "Flight"; case "Otel": return "Hotel"; case "Hotel": return "Hotel"; // TODO: Add other modules case "*": return "all"; default: console.log("Invalid module type"); return "none"; } } function getOperationType( operation: string, ): PermissionFieldType { // FIXME: Smelly code switch (operation) { case "RequestApproval": return "RequestApproval"; case "AddGuestPassengers": return "AddGuestPassengers"; case "*": return "all"; default: console.log("Invalid operation type"); return "none"; } } const perm: IPermission = { domain: getDomainType(splittedDomain ?? ""), module: getModuleType(splittedModule ?? ""), operation: getOperationType(splittedOperation ?? ""), type, }; return perm; };