Router para el select de cualquier sim
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
ALAI_PORT=3002
|
||||
ALAI_PORT=3003
|
||||
ALAI_HOST="0.0.0.0"
|
||||
|
||||
ENVIORMENT=development
|
||||
|
||||
@@ -42,6 +42,7 @@ export class SimAlaiController {
|
||||
|
||||
/**
|
||||
* Metodo duplicado se puede generalizar la a una clase sharedController con las funciones basicas
|
||||
* TODO: meter un check de 429
|
||||
*/
|
||||
private async tryUseCase<T extends any>
|
||||
(msg: ConsumeMessage, usecase: () => Promise<Result<string, T>>): Promise<Result<string, T>> {
|
||||
|
||||
@@ -4,6 +4,8 @@ import { activationValidator, iccidValidator } from "./httpValidators.js"
|
||||
import { companyFromIccid } from "#domain/companies.js"
|
||||
import { BodyValidator } from "sim-shared/aplication/BodyValidator.js"
|
||||
import { tryCatch } from "sim-shared/domain/Result.js"
|
||||
import { mapCompanyService } from "#config/servicesProxy.js"
|
||||
import axios, { AxiosError, isAxiosError } from "axios"
|
||||
|
||||
|
||||
export class SimController {
|
||||
@@ -208,6 +210,57 @@ export class SimController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Select no pasa por la cola de eventos al ser de solo lectura.
|
||||
* Cada uno de los servicios de los proveedores tiene que aderirse al
|
||||
* modelo común de datos de SIM + campo "raw"
|
||||
*
|
||||
* De momento se va a buscar por iccid, mas adlante por movil u otro criterio
|
||||
*/
|
||||
public select() {
|
||||
return async (req: Request, res: Response) => {
|
||||
try {
|
||||
iccidValidator.validate(req.body)
|
||||
} catch (e) {
|
||||
res.status(422).json({
|
||||
errors: {
|
||||
msg: e
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const { iccid } = req.body
|
||||
const company = companyFromIccid(iccid)
|
||||
const url = mapCompanyService.get(company)
|
||||
const endpoint = "/select"
|
||||
|
||||
if (url == undefined) {
|
||||
console.error("[x] Error buscando el servicio para el select del iccid ", iccid)
|
||||
}
|
||||
|
||||
try {
|
||||
const respSelect = await axios.get(url + endpoint)
|
||||
res.json(respSelect.data)
|
||||
// TODO: 200
|
||||
} catch (err) {
|
||||
if (isAxiosError(err)) {
|
||||
const axiosErr = err as AxiosError
|
||||
res.status(axiosErr.status ?? 500).json(err)
|
||||
} else {
|
||||
res.status(500).json({
|
||||
errors: {
|
||||
msg: "Error general buscando la sim"
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Esta funcion se plantea para guardar tarjetas que no han llegado desde
|
||||
* un operador conocido
|
||||
*/
|
||||
public save() {
|
||||
return async (req: Request, res: Response) => {
|
||||
try {
|
||||
|
||||
@@ -270,5 +270,6 @@ export class SimUsecases {
|
||||
|
||||
return this.eventBus.publish([cancelationEvent])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ export const env = {
|
||||
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
|
||||
RABBITMQ_VHOST: String(process.env.RABBITMQ_VHOST),
|
||||
CONNECTIONS_URL: String(process.env.CONNECTIONS_URL),
|
||||
|
||||
OBJENIOUS_CONSUMER_URL: process.env.OBJENIOUS_CONSUMER_URL,
|
||||
NOS_CONSUMER_URL: process.env.NOS_CONSUMER_URL,
|
||||
ALAI_CONSUMER_URL: process.env.ALAI_CONSUMER_URL,
|
||||
};
|
||||
|
||||
10
packages/sim-entrada-eventos/config/servicesProxy.ts
Normal file
10
packages/sim-entrada-eventos/config/servicesProxy.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { env } from "./env/index.js";
|
||||
|
||||
|
||||
export const mapCompanyService = new Map([
|
||||
["alai", env.ALAI_CONSUMER_URL],
|
||||
["nos", env.NOS_CONSUMER_URL],
|
||||
["objenious", env.OBJENIOUS_CONSUMER_URL]
|
||||
])
|
||||
|
||||
|
||||
@@ -35,6 +35,9 @@ app.use("/docs", express.static(path.join(process.cwd(), '../../docs')))
|
||||
// Rutas especificas para casos especiales como el tiempo de suspension de francia
|
||||
app.use("/france", franceRoutes)
|
||||
|
||||
// Rutas especificas de España (Alai)
|
||||
app.use("/spain", spainRoutes)
|
||||
|
||||
app.get("/health", (req, res) => {
|
||||
res.status(200).json({ status: "ok" })
|
||||
})
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { rabbitmqEventBus } from '../config/eventBusConfig.js';
|
||||
import { SimUsecases } from '../aplication/Sim.usecases.js';
|
||||
import { SimController } from '../aplication/Sim.controller.js';
|
||||
import { Router } from 'express';
|
||||
import { OrderRepository } from 'sim-shared/infrastructure/OrderRepository.js';
|
||||
import { postgresClient } from '#config/postgreConfig.js';
|
||||
import { createProxyMiddleware } from 'http-proxy-middleware';
|
||||
import { ClientRequest, } from "http"
|
||||
import { Router, Request } from "express"
|
||||
|
||||
const simRoutes = Router()
|
||||
const orderRepository = new OrderRepository(postgresClient)
|
||||
@@ -37,4 +39,6 @@ simRoutes.post("/test", simController.test())
|
||||
simRoutes.post("/free", simController.free())
|
||||
|
||||
|
||||
// WIP
|
||||
simRoutes.get("/select", simController.select())
|
||||
export { simRoutes }
|
||||
|
||||
Reference in New Issue
Block a user