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 = >{ field: "iccid", errorMsg: "La longitud del iccid es incorrecta debera ser de 19 caracteres", validationFunc: (a: { iccid: string }) => a.iccid.length == 19, } const iccidRequired = >{ field: "iccid", errorMsg: "El iccid debe estara definido", validationFunc: (a: { iccid: string }) => a.iccid != undefined, } const iccidWithValidCompany = >{ field: "iccid", errorMsg: "El iccid no corresponde a una compaƱia registrada", validationFunc: (a: { iccid: string }) => companyFromIccid(a.iccid) != undefined, } const offerExists = >{ field: "offer", errorMsg: "La oferta introducida no es valida", validationFunc: (a: { offer: string }) => offers.has(a.offer), } const isUuidv7 = >{ field: "uuid", errorMsg: "El uuid no es un uuidv7 valido", validationFunc: (a) => a.uuid != undefined && a.uuid.length < 36 } const definedId = >{ field: "id", errorMsg: "El id no se ha definido", validationFunc: (e) => e.id != undefined } const isIntegerId = >{ field: "id", errorMsg: "El id no se ha definido", validationFunc: (e) => Number.isInteger(e.id) } const validNumericId = >{ 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 = >{ 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 ])