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"], ["3399", "objenious"] ]) export class SimController { private simUseCases: SimUsecases constructor(args: { simUseCases: SimUsecases }) { this.simUseCases = args.simUseCases this.activation = this.activation.bind(this) } 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 } = 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 }) 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() } } 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 try { await this.simUseCases.cancelation({ iccid }) } catch (err) { console.error("Error cancelando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de cancelacion" } }) } res.status(200).json({ iccid: iccid, operation: "cancelation" }) } async pause(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 try { await this.simUseCases.cancelation({ iccid }) } catch (err) { console.error("Error pausando la sim ", req.body) res.status(500).json({ errors: { msg: "Error pausando la sim" } }) } res.status(200).json({ iccid: iccid, operation: "cancelation" }) } 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 try { await this.simUseCases.cancelation({ iccid }) } catch (err) { console.error("Error liberando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de liberacion" } }) } res.status(200).json({ iccid: iccid, operation: "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 try { await this.simUseCases.cancelation({ iccid }) } catch (err) { console.error("Error activando la sim ", req.body) res.status(500).json({ errors: { msg: "Error general de activation" } }) } res.status(200).json({ iccid: iccid, operation: "cancelation" }) } 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 } }