Router para el select de cualquier sim

This commit is contained in:
2026-05-06 16:47:52 +02:00
parent eefb7c5a79
commit 7dda25fbfb
9 changed files with 77 additions and 2 deletions

View File

@@ -43,3 +43,4 @@ La decisión del numero de reintentos y la cola de dlx se hace en los servicios,
- **3000**: Gateway (sim-entrada-eventos)
- **3001**: Consumidor NOS (sim-consumidor-nos)
- **3002**: Consumidor Objenious (sim-consumidor-objenious)
- **3003**: Consumidor Alai (sim-consumidor-alai)

View File

@@ -1,4 +1,4 @@
ALAI_PORT=3002
ALAI_PORT=3003
ALAI_HOST="0.0.0.0"
ENVIORMENT=development

View File

@@ -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>> {

View File

@@ -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 {

View File

@@ -270,5 +270,6 @@ export class SimUsecases {
return this.eventBus.publish([cancelationEvent])
}
}

View File

@@ -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,
};

View 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]
])

View File

@@ -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" })
})

View File

@@ -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 }