From 63698ee1aa20c6322ff8487b8dd6be4a96a66245 Mon Sep 17 00:00:00 2001 From: Alvar San Martin Date: Fri, 8 May 2026 14:49:43 +0200 Subject: [PATCH] Misma info de sim para el /select --- docs/sim-objenious/Appel lines.bru | 10 ++-- docs/sim-objenious/Line by iccid.bru | 41 +++++++++++++++++ .../aplication/Sim.controller.ts | 26 ++++++++++- .../aplication/Sim.usecases.ts | 28 +++++++++++ .../domain/transformers.ts | 46 +++++++++++++++++++ packages/sim-consumidor-objenious/index.ts | 1 + packages/sim-shared/domain/objeniousLine.ts | 2 +- .../ObjeniousOperationRepository.ts | 27 +++++++++++ 8 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 docs/sim-objenious/Line by iccid.bru create mode 100644 packages/sim-consumidor-objenious/domain/transformers.ts diff --git a/docs/sim-objenious/Appel lines.bru b/docs/sim-objenious/Appel lines.bru index afc428d..e2f6a3c 100644 --- a/docs/sim-objenious/Appel lines.bru +++ b/docs/sim-objenious/Appel lines.bru @@ -5,16 +5,16 @@ meta { } get { - url: https://api-getway.objenious.com/ws/lines?pageSize=1000&simStatus=ACTIVATED + url: https://api-getway.objenious.com/ws/lines?identifier.identifierType=ICCID&identifier.identifiers=8933201125065160455 body: formUrlEncoded auth: bearer } params:query { - pageSize: 1000 - simStatus: ACTIVATED - ~identifier.identifierType: ICCID - ~identifier.identifiers: 8933201125065160455 + identifier.identifierType: ICCID + identifier.identifiers: 8933201125065160455 + ~pageSize: 1000 + ~simStatus: ACTIVATED } auth:bearer { diff --git a/docs/sim-objenious/Line by iccid.bru b/docs/sim-objenious/Line by iccid.bru new file mode 100644 index 0000000..9639c6f --- /dev/null +++ b/docs/sim-objenious/Line by iccid.bru @@ -0,0 +1,41 @@ +meta { + name: Line by iccid + type: http + seq: 22 +} + +get { + url: https://api-getway.objenious.com/ws/lines?pageSize=1000&simStatus=ACTIVATED + body: formUrlEncoded + auth: bearer +} + +params:query { + pageSize: 1000 + simStatus: ACTIVATED + ~identifier.identifierType: ICCID + ~identifier.identifiers: 8933201125065160455 +} + +auth:bearer { + token: {{ws-access-token-partenaire}} +} + +body:json { + { + "identifier": { + "identifiers": ["8933201124059175967"], + "identifierType": "ICCID" + } + } +} + +body:form-urlencoded { + ~identifier.identifierType: "ICCID" + ~identifier.identifiers: ["8933201124059175967"] +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/packages/sim-consumidor-objenious/aplication/Sim.controller.ts b/packages/sim-consumidor-objenious/aplication/Sim.controller.ts index 2905385..0fee3d4 100644 --- a/packages/sim-consumidor-objenious/aplication/Sim.controller.ts +++ b/packages/sim-consumidor-objenious/aplication/Sim.controller.ts @@ -7,6 +7,8 @@ import { ActionData } from "#domain/DTOs/objeniousapi.js"; import { Request, Response } from "express" import { PaginationArgs, QueryPaginationArgs } from "sim-shared/domain/PaginationArgs.js"; import { paginationValidator } from "./httpValidators.js"; +import { error } from "node:console"; +import { objeniousSimToCommon } from "#domain/transformers.js"; /** * La clase usa generadores de funciones para mantener el contexto @@ -236,7 +238,7 @@ export class SimController { const validationRes = paginationValidator.validate(paginationArgs) if (validationRes.error != undefined) { - res.status(402).json(validationRes) + res.status(422).json(validationRes) return; } @@ -252,6 +254,28 @@ export class SimController { } } + /** + * Una Ășnica linea para /select + */ + public queryLine() { + return async (req: Request, res: Response) => { + const queryParams = req.query + const queryArgs = { + iccid: queryParams.iccid as string // La validacion de iccid se ha tenido que hacer en el gateway + } + + const line = await this.useCases.getLineByIccid(queryArgs.iccid) + if (line.error != undefined) { + res.status(line.error.code).json(line) + return; + } + + const commonLine = objeniousSimToCommon(line.data) + + res.status(200).json({ data: commonLine }) + } + } + /** * TODO: * - Loguear motivos de la no validacion diff --git a/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts b/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts index e6a73e8..ba30c09 100644 --- a/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts +++ b/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts @@ -488,4 +488,32 @@ export class SimUseCases { } } + + public async getLineByIccid(iccid: string): + Promise> { + const line = await this.objeniousRepository.getLineByIccid(iccid) + + if (line.error != undefined) { + return { + error: { + msg: "Error general buscando la sim", + code: 500 + } + } + } + + if (line.data.length == 0) { + return { + error: { + msg: "Sim no encontrada", + code: 204 + } + } + } + + return { + data: line.data[0] + } + + } } diff --git a/packages/sim-consumidor-objenious/domain/transformers.ts b/packages/sim-consumidor-objenious/domain/transformers.ts new file mode 100644 index 0000000..a30ca93 --- /dev/null +++ b/packages/sim-consumidor-objenious/domain/transformers.ts @@ -0,0 +1,46 @@ +import { CommonSim } from "sim-shared/domain/CommonSim.js"; +import { ObjeniousLine } from "sim-shared/domain/objeniousLine.js"; + +type ObjeniousBillingStates = ObjeniousLine["status"]["billingStatus"] +type ObjeniousNetworkStates = ObjeniousLine["status"]["networkStatus"] + +//"PREACTIVATED" | "ACTIVE" | "SUSPENDED" | "TERMINATED" | "UNKNOWN", +const objeiousStates = new Map["billing_status"]>([ + ["ACTIVATED", "ACTIVE"], + ["CANCELED", "TERMINATED"], + ["SUSPENDED", "SUSPENDED"], + ["TEST", "PREACTIVATED"] +]) + +const objeiousNetworkStates = new Map["network_status"]>([ + ["ACTIVATED", "ACTIVE"], + ["CANCELED", "TERMINATED"], + ["SUSPENDED", "SUSPENDED"], + ["BARRED", "SUSPENDED"] +]) + +export function objeniousSimToCommon(objSim: ObjeniousLine): CommonSim { + const status = objeiousStates.get(objSim.status.billingStatus) ?? "UNKNOWN" + const networkStatus = objeiousNetworkStates.get(objSim.status.networkStatus) ?? "UNKNOWN" + + const preDate = objSim.status.preactivationDate + const actDate = objSim.status.activationDate + + const preactivate = (preDate) ? new Date(preDate) : null + const activate = (actDate) ? new Date(actDate) : null + + const common: CommonSim = { + company: "OBJ", + tariff: objSim.offer.code, + iccid: objSim.identifier.iccid, + msisdn: objSim.identifier.msisdn, + billing_status: status, + network_status: networkStatus, + raw: objSim, + imei: objSim.identifier.imei, + preactivation_date: preactivate, + activation_date: activate + } + + return common +} diff --git a/packages/sim-consumidor-objenious/index.ts b/packages/sim-consumidor-objenious/index.ts index 38b6dda..6b8e3a5 100644 --- a/packages/sim-consumidor-objenious/index.ts +++ b/packages/sim-consumidor-objenious/index.ts @@ -97,6 +97,7 @@ async function startWorker() { * } */ app.get("/lines", simController.queryLines()) + app.get("/select", simController.queryLine()) assert.ok(port, "Puerto del servicio no definido") diff --git a/packages/sim-shared/domain/objeniousLine.ts b/packages/sim-shared/domain/objeniousLine.ts index cf48f3b..093f8ec 100644 --- a/packages/sim-shared/domain/objeniousLine.ts +++ b/packages/sim-shared/domain/objeniousLine.ts @@ -82,7 +82,7 @@ export type ObjeniousLine = { activationDate: string | null, //"2026-03-17T11:04:11.408+00:00", commercialStatus: string, //"test", commercialStatusDate: string, //"2026-03-17T11:41:01.493+00:00", - networkStatus: string, // "ACTIVATED", + networkStatus: "ACTIVATED" | "SUSPENDED" | "CANCELED" | "BARRED", // "ACTIVATED", billingStatus: "ACTIVATED" | "SUSPENDED" | "CANCELED" | "TEST", billingStatusChangeDate: string | null, // "2026-03-17T11:01:00.276+00:00", billingActivationDate: string | null //, diff --git a/packages/sim-shared/infrastructure/ObjeniousOperationRepository.ts b/packages/sim-shared/infrastructure/ObjeniousOperationRepository.ts index 9adc9ef..7f80747 100644 --- a/packages/sim-shared/infrastructure/ObjeniousOperationRepository.ts +++ b/packages/sim-shared/infrastructure/ObjeniousOperationRepository.ts @@ -14,6 +14,33 @@ export class ObjeniousOperationsRepository implements IOperationsRepository { ) { } + public async getLineByIccid(iccid: string): Promise> { + const path = "/lines" + const params = new URLSearchParams([ + ["identifier.identifierType", "ICCID"], + ["identifier.identifiers", iccid] + ]) + + const req = this.http.client.get(path, { + params: params + }) + + const res = await tryCatch(req) + + if (res.error != undefined) { + return { + error: res.error?.message + } + } + + const lines = res.data.data.content + + return { + data: lines + } + + } + /** * Consulta el estado de una o mas lineas directamente a la API de Objenious * TODO: No hay paginacion como en getLinesByStatusAPI