Fix de gestion de orders

Proceso de cancelacion verificado
This commit is contained in:
2026-02-27 13:43:09 +01:00
parent 04a6e50b7a
commit 4853fec7ff
10 changed files with 73 additions and 21 deletions

View File

@@ -11,7 +11,7 @@ post {
}
body:form-urlencoded {
iccid: 8933201124059176320
iccid: 8933201125068886692
}
settings {

View File

@@ -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",

View File

@@ -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()]
]);

View File

@@ -239,7 +239,7 @@ export class SimUseCases {
operationPayload: terminationData,
url: OPERATION_URL,
iccid: terminationData.identifier.identifiers[0], //
operation: "suspend"
operation: "terminate"
})
}

View File

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

View File

@@ -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" })
})
})

View File

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

View File

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

View File

@@ -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<string, StatusEnum>([
["en cours", "running"],
["terminé", "finished"]
["terminé", "finished"],
["annulé", "finished"]
])
const res = equivalentMap.get(sanitizedStatus)
if (res == undefined) return "running"

View File

@@ -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",