import { Request, Response } from "express" import { SimUsecases } from "aplication/Sim.usecases" import { error } from "node:console" // Partiendo del caracter 3 2 de pais + 2 de compañia // Metiendolo a la BDD podria ser mas dinamico pero perderia // tiempo de query // Puede que esté bien crear un endpoint para administrarlo const COMPAÑIASICCID = new Map( [ ["3490", "alai"], ["3510", "nos"], ["3320", "objenious"] ]) export class SimController { private simUseCases: SimUsecases constructor(args: { simUseCases: SimUsecases }) { this.simUseCases = args.simUseCases this.activation = this.activation.bind(this) } async preactivation(req: Request, res: Response) { const valido = this.validateBody(req.body, res) if (valido == false) return; const { iccid } = req.body const compañia = this.compañiaFromIccid(iccid) if (compañia == undefined) { res.status(500).json({ errors: { msg: "El iccid no pertenece a una compañia conocida" } }) return; } try { await this.simUseCases.preActivation({ iccid, compañia }) res.status(200).json({ iccid: iccid, operation: "activation" }).send() } catch (err) { console.error("Error activando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de activation" } }).send() return; } } async activation(req: Request, res: Response) { const valido = this.validateBody(req.body, res) if (valido == false) return; // Si no es valido ya se ha enviado el error const { iccid, offer } = req.body const compañia = this.compañiaFromIccid(iccid) if (compañia == undefined) { res.status(500).json({ errors: { msg: "El iccid no pertenece a una compañia conocida" } }) return; } try { await this.simUseCases.activation({ iccid, compañia, offer }) res.status(200).json({ iccid: iccid, operation: "activation" }).send() } catch (err) { console.error("Error activando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de activation" } }).send() return; } } async cancelation(req: Request, res: Response) { const valido = this.validateBody(req.body, res) if (valido == false) return; // Si no es valido ya se ha enviado el error const { iccid } = req.body const compañia = this.compañiaFromIccid(iccid) try { await this.simUseCases.cancelation({ iccid, compañia }) res.status(200).json({ iccid: iccid, operation: "cancelation" }) } catch (err) { console.error("Error cancelando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de cancelacion" } }) } } public pause() { return async (req: Request, res: Response) => { const valido = this.validateBody(req.body, res) if (valido == false) return; // Si no es valido ya se ha enviado el error const { iccid } = req.body const compañia = this.compañiaFromIccid(iccid) try { await this.simUseCases.pause({ iccid, compañia }) res.status(200).json({ iccid: iccid, operation: "cancelation" }) } catch (err) { console.error("Error pausando la sim ", req.body) res.status(500).json({ errors: { msg: "Error pausando la sim" } }) } } } async free(req: Request, res: Response) { const valido = this.validateBody(req.body, res) if (valido == false) return; // Si no es valido ya se ha enviado el error const { iccid } = req.body const compañia = this.compañiaFromIccid(iccid) try { await this.simUseCases.cancelation({ iccid, compañia }) res.status(200).json({ iccid: iccid, operation: "liberacion" }) } catch (err) { console.error("Error liberando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de liberacion" } }) } } async save(req: Request, res: Response) { const valido = this.validateBody(req.body, res) if (valido == false) return; // Si no es valido ya se ha enviado el error const { iccid } = req.body const compañia = this.compañiaFromIccid(iccid) try { await this.simUseCases.cancelation({ iccid, compañia }) res.status(200).json({ iccid: iccid, operation: "cancelation" }) } catch (err) { console.error("Error activando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de activation" } }) } } private validateBody(body: any, res: Response) { const { iccid } = body let errors = {} let valid = true if (iccid == undefined) { res.status(400) errors = { ...errors, iccid: "El iccid es undefined" } valid = false } if (valid == false) { res.json({ errors: errors }) } return valid; } /** * A partir del iccid completo devuelve la compañia a la que pertenece * @throws Error si no hay una compañia definida en COMPAÑIASICCID con el codigo */ private compañiaFromIccid(iccid: string) { const caracteresCommpañia = iccid.slice(2, 6) const compañia = COMPAÑIASICCID.get(caracteresCommpañia) if (compañia == undefined) throw new Error("El la compañia es desconocida: " + caracteresCommpañia) return compañia } }