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: "correlation_id", errorMsg: "El uuid no es un uuidv7 valido", validationFunc: (a) => a.correlation_id != undefined && a.correlation_id.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 } export const activationValidator = new BodyValidator<{ iccid: string, offer: string }>( [ iccidRequired, iccidLongitudValidator, iccidWithValidCompany, offerExists, ] ) export const iccidValidator = new BodyValidator<{ iccid: string }>( [ iccidRequired, iccidLongitudValidator, iccidWithValidCompany, ] ) export const uuidValidator = new BodyValidator<{ correlation_id?: string }>([ isUuidv7 ]) export const idValidator = new BodyValidator<{ id?: number }>([ definedId, isIntegerId, validNumericId ])