From 410f659db0595a8bf705b06404c41ab84381033d Mon Sep 17 00:00:00 2001 From: Alvar San Martin Date: Fri, 8 May 2026 12:06:24 +0200 Subject: [PATCH] Sim comun para nos --- docs/sim-api/Select.bru | 4 +- .../aplication/SimAlai.controller.ts | 5 ++- .../domain/transformers.ts | 13 +++++-- .../aplication/SimNOS.controller.ts | 13 +++++-- packages/sim-consumidor-nos/domain/NosAPI.ts | 4 +- .../sim-consumidor-nos/domain/transformers.ts | 39 +++++++++++++++++++ .../aplication/httpValidators.ts | 15 +++++++ packages/sim-shared/domain/CommonSim.ts | 12 ++++++ 8 files changed, 93 insertions(+), 12 deletions(-) create mode 100644 packages/sim-consumidor-nos/domain/transformers.ts diff --git a/docs/sim-api/Select.bru b/docs/sim-api/Select.bru index fb4b492..27796fa 100644 --- a/docs/sim-api/Select.bru +++ b/docs/sim-api/Select.bru @@ -5,13 +5,13 @@ meta { } get { - url: {{baseurl}}/sim/select?iccid=8934909001500561503 + url: {{baseurl}}/sim/select?iccid=8935103196306448300 body: none auth: inherit } params:query { - iccid: 8934909001500561503 + iccid: 8935103196306448300 } settings { diff --git a/packages/sim-consumidor-alai/aplication/SimAlai.controller.ts b/packages/sim-consumidor-alai/aplication/SimAlai.controller.ts index a61a90d..0177b4f 100644 --- a/packages/sim-consumidor-alai/aplication/SimAlai.controller.ts +++ b/packages/sim-consumidor-alai/aplication/SimAlai.controller.ts @@ -5,6 +5,7 @@ import { EventBus } from "sim-shared/domain/EventBus.port.js"; import { Result } from "sim-shared/domain/Result.js"; import { SimEvents } from "sim-shared/domain/SimEvents.js"; import { iccidValidator } from "./httpValidators.js"; +import { alaiSimToCommonSim } from "#domain/transformers.js"; export class SimAlaiController { @@ -155,7 +156,9 @@ export class SimAlaiController { res.status(500).json(usecaseRes) return; } else { - res.send(usecaseRes) + const { sim, subscription, imei } = usecaseRes.data + const simData = alaiSimToCommonSim(sim, subscription, imei) + res.send(simData) return; } } diff --git a/packages/sim-consumidor-alai/domain/transformers.ts b/packages/sim-consumidor-alai/domain/transformers.ts index cfdcdbf..45e09d7 100644 --- a/packages/sim-consumidor-alai/domain/transformers.ts +++ b/packages/sim-consumidor-alai/domain/transformers.ts @@ -18,22 +18,27 @@ const alaiNetworkStates = new Map["network ["ACTIVE", "ACTIVE"], ["PRE_ACTIVE", "PREACTIVATED"], ["BLOCKED", "SUSPENDED"], - ["DEACTIVATE", "TERMINATED"], + ["DEACTIVATE", "SUSPENDED"], ["FRAUD", "TERMINATED"] ]) -export function alaiSimToCommonSim(alaiSim: AlaiAPI.Sim, alaiSubscription: AlaiAPI.Subscription): Result> { +export function alaiSimToCommonSim(alaiSim: AlaiAPI.Sim, alaiSubscription: AlaiAPI.Subscription, imeiSubscription: AlaiAPI.GetImeiSubscriptionDTO): + Result> { const status = alaiStates.get(alaiSubscription.status) ?? "UNKNOWN" const networkStatus = alaiNetworkStates.get(alaiSubscription.networkStatus) ?? "UNKNOWN" - const commonSim: CommonSim = { + const commonSim: CommonSim = { company: "ALAI", + tariff: alaiSubscription.name, iccid: alaiSim.id, msisdn: alaiSubscription.lastMsisdnID, billing_status: status, network_status: networkStatus, - raw: alaiSim + raw: alaiSubscription, + imei: imeiSubscription.content[0].id ?? "0", + preactivation_date: new Date(alaiSubscription.creationDate), + activation_date: new Date(alaiSubscription.firstActivationDate) } return { diff --git a/packages/sim-consumidor-nos/aplication/SimNOS.controller.ts b/packages/sim-consumidor-nos/aplication/SimNOS.controller.ts index 9eebb4f..5912ad6 100644 --- a/packages/sim-consumidor-nos/aplication/SimNOS.controller.ts +++ b/packages/sim-consumidor-nos/aplication/SimNOS.controller.ts @@ -5,6 +5,8 @@ import { EventBus } from "sim-shared/domain/EventBus.port.js"; import { Result } from "sim-shared/domain/Result.js"; import { SimEvents } from "sim-shared/domain/SimEvents.js"; import { iccidValidator } from "./httpValidators.js"; +import { error } from "node:console"; +import { nosSimToCommonSim } from "#domain/transformers.js"; export class SimNosController { @@ -142,12 +144,17 @@ export class SimNosController { res.status(500).json(usecaseRes) return; } else { - res.send(usecaseRes.data) + const simComun = nosSimToCommonSim(usecaseRes.data) + res.status(200).send({ data: simComun }) return; } } - res.status(200).json(validateBody) + res.status(501).json({ + errors: { + msg: "No está implementada la busqueda por lista de iccid" + } + }) } } @@ -168,7 +175,7 @@ export class SimNosController { res.status(500).json(usecaseRes) return; } else { - res.status(200).send(usecaseRes.data) + res.status(200).send(usecaseRes) return; } } diff --git a/packages/sim-consumidor-nos/domain/NosAPI.ts b/packages/sim-consumidor-nos/domain/NosAPI.ts index 2bcb728..93f5fc6 100644 --- a/packages/sim-consumidor-nos/domain/NosAPI.ts +++ b/packages/sim-consumidor-nos/domain/NosAPI.ts @@ -103,7 +103,7 @@ export namespace NosApi { export type NetworkState = { currentStateId: number - currentState: string + currentState: "active" | "barred" | "terminated" isTransferring: boolean lastTransferred: number isOnline: boolean @@ -112,7 +112,7 @@ export namespace NosApi { export type BillingState = { currentStateId: number - currentState: string + currentState: "active" | "terminated" } export type BarData = { diff --git a/packages/sim-consumidor-nos/domain/transformers.ts b/packages/sim-consumidor-nos/domain/transformers.ts new file mode 100644 index 0000000..8e3b52a --- /dev/null +++ b/packages/sim-consumidor-nos/domain/transformers.ts @@ -0,0 +1,39 @@ +import { CommonSim } from "sim-shared/domain/CommonSim.js"; +import { NosApi } from "./NosAPI.js"; + +const billingStates = new Map< + NosApi.LineData["billingState"]["currentState"], + CommonSim["billing_status"]>([ + ["active", "ACTIVE"], + ["terminated", "TERMINATED"] + ]) + +const networkStates = new Map< + NosApi.LineData["networkState"]["currentState"], + CommonSim["network_status"] +>([ + ["active", "ACTIVE"], + ["terminated", "TERMINATED"], + ["barred", "SUSPENDED"] +]) + +export function nosSimToCommonSim(nosSim: NosApi.LineData): CommonSim { + const billingState = billingStates.get(nosSim.billingState.currentState) ?? "UNKNOWN" + const networkState = networkStates.get(nosSim.networkState.currentState) ?? "UNKNOWN" + + const commonSim: CommonSim = { + company: "NOS", + tariff: nosSim.tariffName, + iccid: nosSim.physicalId, + msisdn: nosSim.subscriberId, + billing_status: billingState!, + network_status: networkState!, + raw: nosSim, + imei: nosSim.imei, + activation_date: new Date(nosSim.connectionDate), + termination_date: new Date(nosSim.terminateDate), + suspension_date: null // NOS no especifica la fecha de de 'barred' que equivale a la suspension + } + + return commonSim +} diff --git a/packages/sim-entrada-eventos/aplication/httpValidators.ts b/packages/sim-entrada-eventos/aplication/httpValidators.ts index b055b40..ba2b066 100644 --- a/packages/sim-entrada-eventos/aplication/httpValidators.ts +++ b/packages/sim-entrada-eventos/aplication/httpValidators.ts @@ -56,12 +56,27 @@ const validNumericId = >{ validationFunc: (e) => e.id! >= 0 } +/** + * Por un problema arrastrado de alai, se tiene que guardar el orderId del pedido + * de la sim en un campo de Alai. + */ +const ifAlaiOrderId = >{ + field: "orderId", + errorMsg: "Es necesario incluir un id de pedido (orderId) en las activaciones de Alai", + validationFunc: (e) => { + const company = companyFromIccid(e.iccid) + if (company == "alai" && e.orderId == undefined) return false + return true + } +} + export const activationValidator = new BodyValidator<{ iccid: string, offer: string }>( [ iccidRequired, iccidLongitudValidator, iccidWithValidCompany, offerExists, + ifAlaiOrderId ] ) diff --git a/packages/sim-shared/domain/CommonSim.ts b/packages/sim-shared/domain/CommonSim.ts index 31fc2ee..6445f57 100644 --- a/packages/sim-shared/domain/CommonSim.ts +++ b/packages/sim-shared/domain/CommonSim.ts @@ -12,3 +12,15 @@ export type CommonSim = { imei?: string, raw: T } + +/** + * Acorde a una peticion rest donde `raw` va a depender de `company` + */ +export type CommonSimDTO = CommonSim> & { + preactivation_date?: string | null, + activation_date?: string | null, + suspension_date?: string | null, + termination_date?: string | null, +} + +