Files
sf-sim/packages/sim-entrada-eventos/aplication/httpValidators.ts
2026-05-08 12:06:24 +02:00

100 lines
2.7 KiB
TypeScript

import { companyFromIccid } from "#domain/companies.js";
import { BodyValidator, Validator } from "sim-shared/aplication/BodyValidator.js";
const offers = new Map([
["mensual", "SAVEFAMILY1"],
["anual", "SAVEFAMILY2"],
["SAVEFAMILY1", "SAVEFAMILY1"],
["SAVEFAMILY2", "SAVEFAMILY2"],
])
const iccidLongitudValidator = <Validator<{ iccid: string }>>{
field: "iccid",
errorMsg: "La longitud del iccid es incorrecta debera ser de 19 caracteres",
validationFunc: (a: { iccid: string }) => a.iccid.length == 19,
}
const iccidRequired = <Validator<{ iccid: string }>>{
field: "iccid",
errorMsg: "El iccid debe estara definido",
validationFunc: (a: { iccid: string }) => a.iccid != undefined,
}
const iccidWithValidCompany = <Validator<{ iccid: string }>>{
field: "iccid",
errorMsg: "El iccid no corresponde a una compañia registrada",
validationFunc: (a: { iccid: string }) => companyFromIccid(a.iccid) != undefined,
}
const offerExists = <Validator<{ offer: string }>>{
field: "offer",
errorMsg: "La oferta introducida no es valida",
validationFunc: (a: { offer: string }) => offers.has(a.offer),
}
const isUuidv7 = <Validator<{ uuid?: string }>>{
field: "uuid",
errorMsg: "El uuid no es un uuidv7 valido",
validationFunc: (a) => a.uuid != undefined && a.uuid.length < 36
}
const definedId = <Validator<{ id?: number }>>{
field: "id",
errorMsg: "El id no se ha definido",
validationFunc: (e) => e.id != undefined
}
const isIntegerId = <Validator<{ id?: number }>>{
field: "id",
errorMsg: "El id no se ha definido",
validationFunc: (e) => Number.isInteger(e.id)
}
const validNumericId = <Validator<{ id?: number }>>{
field: "id",
errorMsg: "El id introducido no es un numero >= 0",
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
]
)
export const iccidValidator = new BodyValidator<{ iccid: string }>(
[
iccidRequired,
iccidLongitudValidator,
iccidWithValidCompany,
]
)
export const uuidValidator = new BodyValidator<{ uuid?: string }>([
isUuidv7
])
export const idValidator = new BodyValidator<{ id?: number }>([
definedId,
isIntegerId,
validNumericId
])