Router para el select de cualquier sim
This commit is contained in:
@@ -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)
|
- **3000**: Gateway (sim-entrada-eventos)
|
||||||
- **3001**: Consumidor NOS (sim-consumidor-nos)
|
- **3001**: Consumidor NOS (sim-consumidor-nos)
|
||||||
- **3002**: Consumidor Objenious (sim-consumidor-objenious)
|
- **3002**: Consumidor Objenious (sim-consumidor-objenious)
|
||||||
|
- **3003**: Consumidor Alai (sim-consumidor-alai)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
ALAI_PORT=3002
|
ALAI_PORT=3003
|
||||||
ALAI_HOST="0.0.0.0"
|
ALAI_HOST="0.0.0.0"
|
||||||
|
|
||||||
ENVIORMENT=development
|
ENVIORMENT=development
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ export class SimAlaiController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Metodo duplicado se puede generalizar la a una clase sharedController con las funciones basicas
|
* 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>
|
private async tryUseCase<T extends any>
|
||||||
(msg: ConsumeMessage, usecase: () => Promise<Result<string, T>>): Promise<Result<string, T>> {
|
(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 { companyFromIccid } from "#domain/companies.js"
|
||||||
import { BodyValidator } from "sim-shared/aplication/BodyValidator.js"
|
import { BodyValidator } from "sim-shared/aplication/BodyValidator.js"
|
||||||
import { tryCatch } from "sim-shared/domain/Result.js"
|
import { tryCatch } from "sim-shared/domain/Result.js"
|
||||||
|
import { mapCompanyService } from "#config/servicesProxy.js"
|
||||||
|
import axios, { AxiosError, isAxiosError } from "axios"
|
||||||
|
|
||||||
|
|
||||||
export class SimController {
|
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() {
|
public save() {
|
||||||
return async (req: Request, res: Response) => {
|
return async (req: Request, res: Response) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -270,5 +270,6 @@ export class SimUsecases {
|
|||||||
|
|
||||||
return this.eventBus.publish([cancelationEvent])
|
return this.eventBus.publish([cancelationEvent])
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ export const env = {
|
|||||||
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
|
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
|
||||||
RABBITMQ_VHOST: String(process.env.RABBITMQ_VHOST),
|
RABBITMQ_VHOST: String(process.env.RABBITMQ_VHOST),
|
||||||
CONNECTIONS_URL: String(process.env.CONNECTIONS_URL),
|
CONNECTIONS_URL: String(process.env.CONNECTIONS_URL),
|
||||||
|
|
||||||
OBJENIOUS_CONSUMER_URL: process.env.OBJENIOUS_CONSUMER_URL,
|
OBJENIOUS_CONSUMER_URL: process.env.OBJENIOUS_CONSUMER_URL,
|
||||||
NOS_CONSUMER_URL: process.env.NOS_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
|
// Rutas especificas para casos especiales como el tiempo de suspension de francia
|
||||||
app.use("/france", franceRoutes)
|
app.use("/france", franceRoutes)
|
||||||
|
|
||||||
|
// Rutas especificas de España (Alai)
|
||||||
|
app.use("/spain", spainRoutes)
|
||||||
|
|
||||||
app.get("/health", (req, res) => {
|
app.get("/health", (req, res) => {
|
||||||
res.status(200).json({ status: "ok" })
|
res.status(200).json({ status: "ok" })
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { rabbitmqEventBus } from '../config/eventBusConfig.js';
|
import { rabbitmqEventBus } from '../config/eventBusConfig.js';
|
||||||
import { SimUsecases } from '../aplication/Sim.usecases.js';
|
import { SimUsecases } from '../aplication/Sim.usecases.js';
|
||||||
import { SimController } from '../aplication/Sim.controller.js';
|
import { SimController } from '../aplication/Sim.controller.js';
|
||||||
import { Router } from 'express';
|
|
||||||
import { OrderRepository } from 'sim-shared/infrastructure/OrderRepository.js';
|
import { OrderRepository } from 'sim-shared/infrastructure/OrderRepository.js';
|
||||||
import { postgresClient } from '#config/postgreConfig.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 simRoutes = Router()
|
||||||
const orderRepository = new OrderRepository(postgresClient)
|
const orderRepository = new OrderRepository(postgresClient)
|
||||||
@@ -37,4 +39,6 @@ simRoutes.post("/test", simController.test())
|
|||||||
simRoutes.post("/free", simController.free())
|
simRoutes.post("/free", simController.free())
|
||||||
|
|
||||||
|
|
||||||
|
// WIP
|
||||||
|
simRoutes.get("/select", simController.select())
|
||||||
export { simRoutes }
|
export { simRoutes }
|
||||||
|
|||||||
Reference in New Issue
Block a user