Files
sf-sim/packages/sim-entrada-eventos/aplication/Sim.controller.ts

186 lines
4.3 KiB
TypeScript

import { Request, Response } from "express"
import { SimUsecases } from "aplication/Sim.usecases"
// 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<string, string>(
[
["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)
try {
await this.simUseCases.activation({ iccid, compañia })
} catch (err) {
console.error("Error activando la sim ", req.body)
res.status(500).json({
errors: {
msg: "Error general de activation"
}
}).send()
}
res.status(200).json({
iccid: iccid,
operation: "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
}
}