Sim comun para nos

This commit is contained in:
2026-05-08 12:06:24 +02:00
parent 08c972e720
commit 410f659db0
8 changed files with 93 additions and 12 deletions

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -18,22 +18,27 @@ const alaiNetworkStates = new Map<AlaiAPI.NetworkStatus, CommonSim<any>["network
["ACTIVE", "ACTIVE"],
["PRE_ACTIVE", "PREACTIVATED"],
["BLOCKED", "SUSPENDED"],
["DEACTIVATE", "TERMINATED"],
["DEACTIVATE", "SUSPENDED"],
["FRAUD", "TERMINATED"]
])
export function alaiSimToCommonSim(alaiSim: AlaiAPI.Sim, alaiSubscription: AlaiAPI.Subscription): Result<string, CommonSim<AlaiAPI.Sim>> {
export function alaiSimToCommonSim(alaiSim: AlaiAPI.Sim, alaiSubscription: AlaiAPI.Subscription, imeiSubscription: AlaiAPI.GetImeiSubscriptionDTO):
Result<string, CommonSim<AlaiAPI.Subscription>> {
const status = alaiStates.get(alaiSubscription.status) ?? "UNKNOWN"
const networkStatus = alaiNetworkStates.get(alaiSubscription.networkStatus) ?? "UNKNOWN"
const commonSim: CommonSim<AlaiAPI.Sim> = {
const commonSim: CommonSim<AlaiAPI.Subscription> = {
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 {

View File

@@ -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;
}
}

View File

@@ -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 = {

View File

@@ -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<any>["billing_status"]>([
["active", "ACTIVE"],
["terminated", "TERMINATED"]
])
const networkStates = new Map<
NosApi.LineData["networkState"]["currentState"],
CommonSim<any>["network_status"]
>([
["active", "ACTIVE"],
["terminated", "TERMINATED"],
["barred", "SUSPENDED"]
])
export function nosSimToCommonSim(nosSim: NosApi.LineData): CommonSim<NosApi.LineData> {
const billingState = billingStates.get(nosSim.billingState.currentState) ?? "UNKNOWN"
const networkState = networkStates.get(nosSim.networkState.currentState) ?? "UNKNOWN"
const commonSim: CommonSim<NosApi.LineData> = {
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
}

View File

@@ -56,12 +56,27 @@ const validNumericId = <Validator<{ id?: number }>>{
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 = <Validator<{ iccid: string, orderId?: string }>>{
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
]
)

View File

@@ -12,3 +12,15 @@ export type CommonSim<T> = {
imei?: string,
raw: T
}
/**
* Acorde a una peticion rest donde `raw` va a depender de `company`
*/
export type CommonSimDTO = CommonSim<Record<string, string>> & {
preactivation_date?: string | null,
activation_date?: string | null,
suspension_date?: string | null,
termination_date?: string | null,
}