diff --git a/docs/sim-api/Cancel.bru b/docs/sim-api/Cancel.bru index 3d6108f..cb35006 100644 --- a/docs/sim-api/Cancel.bru +++ b/docs/sim-api/Cancel.bru @@ -11,7 +11,7 @@ post { } body:form-urlencoded { - iccid: 8933201124059176320 + iccid: 8933201125068886692 } settings { diff --git a/packages/sim-consumidor-objenious/aplication/Sim.controller.ts b/packages/sim-consumidor-objenious/aplication/Sim.controller.ts index 7b300ff..c2581ce 100644 --- a/packages/sim-consumidor-objenious/aplication/Sim.controller.ts +++ b/packages/sim-consumidor-objenious/aplication/Sim.controller.ts @@ -84,6 +84,7 @@ export class SimController { } const resp = await this.tryUseCase(msg, this.useCases.activate({ + correlation_id: msgData.headers?.message_id, dueDate: this.genDueDate(DUE_DATE_SECONDS).toISOString(), customerAccountCode: env.OBJ_CUSTOMER_CODE, identifier: { @@ -118,6 +119,7 @@ export class SimController { const iccid = msgData.payload.iccid const res = await this.tryUseCase(msg, this.useCases.preActivate({ + correlation_id: msgData.headers?.message_id, dueDate: this.genDueDate(2 * 60).toISOString(), identifier: { identifierType: "ICCID", @@ -144,6 +146,7 @@ export class SimController { const iccid = msgData.payload.iccid const res = await this.tryUseCase(msg, this.useCases.reActivate({ + correlation_id: msgData.headers?.message_id, dueDate: this.genDueDate(2 * 60).toISOString(), identifier: { identifierType: "ICCID", @@ -169,6 +172,7 @@ export class SimController { const iccid = msgData.payload.iccid const res = await this.tryUseCase(msg, this.useCases.suspend({ + correlation_id: msgData.headers?.message_id, dueDate: this.genDueDate(2 * 60).toISOString(), identifier: { identifierType: "ICCID", @@ -192,8 +196,9 @@ export class SimController { return Promise.reject("Mensaje invalido") } const iccid = msgData.payload.iccid - console.log("Mensaje procesado", String(msgData)) + console.log("Mensaje procesado", msgData) const res = await this.tryUseCase(msg, this.useCases.terminate({ + correlation_id: msgData.headers?.message_id, dueDate: this.genDueDate(2 * 60).toISOString(), identifier: { identifierType: "ICCID", diff --git a/packages/sim-consumidor-objenious/aplication/Sim.router.ts b/packages/sim-consumidor-objenious/aplication/Sim.router.ts index 67d8266..79a001e 100644 --- a/packages/sim-consumidor-objenious/aplication/Sim.router.ts +++ b/packages/sim-consumidor-objenious/aplication/Sim.router.ts @@ -18,7 +18,7 @@ export class SimRouter { this.routes = new Map([ ["activate", this.simController.activate()], ["pause", this.simController.suspend()], - ["cancel", this.simController.terminate()], // terminate + ["cancel", this.simController.terminate()], ["reActivate", this.simController.reActivate()], ["preActivate", this.simController.preActivate()] ]); diff --git a/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts b/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts index d0d425a..c6d9093 100644 --- a/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts +++ b/packages/sim-consumidor-objenious/aplication/Sim.usecases.ts @@ -239,7 +239,7 @@ export class SimUseCases { operationPayload: terminationData, url: OPERATION_URL, iccid: terminationData.identifier.identifiers[0], // - operation: "suspend" + operation: "terminate" }) } diff --git a/packages/sim-entrada-eventos/aplication/Sim.controller.ts b/packages/sim-entrada-eventos/aplication/Sim.controller.ts index 90af832..bfb514e 100644 --- a/packages/sim-entrada-eventos/aplication/Sim.controller.ts +++ b/packages/sim-entrada-eventos/aplication/Sim.controller.ts @@ -140,6 +140,8 @@ export class SimController { msg: e } }) + console.error("[!] Error validando mensaje") + return; } const { iccid, offer } = req.body @@ -163,6 +165,8 @@ export class SimController { iccid: iccid, operation: "activation" }).send() + return; + } catch (err) { console.error("Error activando la sim ", req.body) res.status(500).json({ diff --git a/packages/sim-entrada-eventos/aplication/httpValidators.test.ts b/packages/sim-entrada-eventos/aplication/httpValidators.test.ts new file mode 100644 index 0000000..15180fd --- /dev/null +++ b/packages/sim-entrada-eventos/aplication/httpValidators.test.ts @@ -0,0 +1,38 @@ +import { describe, it } from "node:test"; +import { iccidValidator } from "./httpValidators.js"; +import assert from "node:assert"; + +describe("test validators", () => { + it("should validate 19 char iccid", () => { + const validBody = { + iccid: "8933201125068886692" + } + const res = iccidValidator.validate(validBody) + assert(res == true) + }), + + it("shouldnt validate empty string iccid", () => { + const validBody = { + iccid: "" + } + + assert + .throws(() => iccidValidator.validate(validBody), { message: "La longitud del iccid es incorrecta debera ser de 19 caracteres" }) + + }), + + it("shouldnt validate >19 char iccid", () => { + const validBody = { + iccid: "893320112506888669212345" + } + assert + .throws(() => iccidValidator.validate(validBody), { message: "La longitud del iccid es incorrecta debera ser de 19 caracteres" }) + }), + it("shouldnt validate <19 char iccid", () => { + const validBody = { + iccid: "8933201125" + } + assert + .throws(() => iccidValidator.validate(validBody), { message: "La longitud del iccid es incorrecta debera ser de 19 caracteres" }) + }) +}) diff --git a/packages/sim-entrada-eventos/aplication/httpValidators.ts b/packages/sim-entrada-eventos/aplication/httpValidators.ts index abff573..2ab857a 100644 --- a/packages/sim-entrada-eventos/aplication/httpValidators.ts +++ b/packages/sim-entrada-eventos/aplication/httpValidators.ts @@ -63,7 +63,7 @@ export const activationValidator = new BodyValidator<{ iccid: string, offer: str ] ) -export const iccidValidator = new BodyValidator<{ iccid: string, offer: string }>( +export const iccidValidator = new BodyValidator<{ iccid: string }>( [ iccidRequired, iccidLongitudValidator, diff --git a/packages/sim-entrada-eventos/package.json b/packages/sim-entrada-eventos/package.json index 8191cc4..b59bdc9 100644 --- a/packages/sim-entrada-eventos/package.json +++ b/packages/sim-entrada-eventos/package.json @@ -39,7 +39,7 @@ } }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "node --import tsx --test ./**/*.test.ts", "build": "tsc --build && tsc-alias -p tsconfig.json && cp package.json ../../dist/packages/sim-entrada-eventos/", "dev": "tsx watch index.ts", "start": "node ../../dist/packages/sim-entrada-eventos/index.js" diff --git a/packages/sim-objenious-cron/tasks/check_objenious_request.ts b/packages/sim-objenious-cron/tasks/check_objenious_request.ts index a60fe7a..49c1f2a 100644 --- a/packages/sim-objenious-cron/tasks/check_objenious_request.ts +++ b/packages/sim-objenious-cron/tasks/check_objenious_request.ts @@ -117,7 +117,7 @@ export class CheckObjeniousRequests { updatedAction.last_change_date = new Date().toISOString() updatedAction.end_date = originalAction.last_change_date - if (uorStatus /*== "finished"*/) { + if (uorStatus == "finished") { console.log(" ****> Status", uorStatus) if (uorStatus != "finished") { console.error("!!! Notificando estado no finished") @@ -135,18 +135,21 @@ export class CheckObjeniousRequests { console.error(e) }) } - this.notifyFinalization({ - ...originalAction, - msisdn - }) - // TODO la accion no siempre es activacion! - .then(e => { - console.log("[o] Notificada la activacion de ", originalAction.iccids) - }) - .catch(e => { - console.error("[x] Error enviando la activacion de ", originalAction) - console.error(e) + + if (originalAction.operation == "activation") { + this.notifyFinalization({ + ...originalAction, + msisdn }) + // TODO la accion no siempre es activacion! + .then(e => { + console.log("[o] Notificada la activacion de ", originalAction.iccids) + }) + .catch(e => { + console.error("[x] Error enviando la activacion de ", originalAction) + console.error(e) + }) + } } if (info != undefined) { @@ -173,7 +176,8 @@ export class CheckObjeniousRequests { // ! Importante las claves siempre en minuscula, los valores son cammelCase const equivalentMap = new Map([ ["en cours", "running"], - ["terminé", "finished"] + ["terminé", "finished"], + ["annulé", "finished"] ]) const res = equivalentMap.get(sanitizedStatus) if (res == undefined) return "running" diff --git a/packages/sim-shared/infrastructure/OrderRepository.ts b/packages/sim-shared/infrastructure/OrderRepository.ts index e80214e..a6c23b5 100644 --- a/packages/sim-shared/infrastructure/OrderRepository.ts +++ b/packages/sim-shared/infrastructure/OrderRepository.ts @@ -240,7 +240,7 @@ export class OrderRepository { ) RETURNING id; ` - const vOrderHistory = [args.id, currentOrder.status, args.new_status, args.reason] + const vOrderHistory = [orderId, currentOrder.status, args.new_status, args.reason] const newOrderHistoryResult = await this.getFirst( client.query<{ id: number }>(iOrderHistory, vOrderHistory) ) @@ -331,7 +331,7 @@ export class OrderRepository { ) RETURNING id; ` - const vOrderHistory = [args.id, currentOrder.status, args.reason ?? "finished successfully"] + const vOrderHistory = [orderId, currentOrder.status, args.reason ?? "finished successfully"] const newOrderHistoryResult = await this.getFirst( client.query<{ id: number }>(iOrderHistory, vOrderHistory) ) @@ -352,6 +352,7 @@ export class OrderRepository { return updatedOrder } + // TODO: tema de poder filtrar por correlation_id public async errorOrder(args: { id: number, status: "failed" | "dlx",