Hexagonal, mejora del cliente RMQ y tipos de eventos
This commit is contained in:
42
packages/sim-entrada-eventos/aplication/Sim.usecases.ts
Normal file
42
packages/sim-entrada-eventos/aplication/Sim.usecases.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { EventBus } from "../../shared/domain/EventBus.port";
|
||||
import { SimEvents } from "../../shared/domain/SimEvents";
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
* - Conexion con la BDD
|
||||
* - Conexion con RabbitMQ
|
||||
* - Pasar a clase cuando existan las conexiones
|
||||
*/
|
||||
export class SimUsecases {
|
||||
private eventBus: EventBus
|
||||
|
||||
constructor(args: {
|
||||
eventBus: EventBus
|
||||
}
|
||||
) {
|
||||
this.eventBus = args.eventBus
|
||||
}
|
||||
|
||||
async activation(args: { iccid: string }) {
|
||||
const activationEvent = <SimEvents.activation>{
|
||||
key: "sim.activation",
|
||||
payload: {
|
||||
iccid: args.iccid
|
||||
}
|
||||
}
|
||||
|
||||
return this.eventBus.publish([activationEvent])
|
||||
}
|
||||
|
||||
cancelation(args: { iccid: string }) {
|
||||
throw new Error("Function not implemented.");
|
||||
}
|
||||
|
||||
pause(args: { iccid: string }) {
|
||||
throw new Error("Function not implemented.");
|
||||
}
|
||||
free(args: { iccid: string }) {
|
||||
throw new Error("Function not implemented.");
|
||||
}
|
||||
}
|
||||
|
||||
37
packages/sim-entrada-eventos/aplication/SimController.ts
Normal file
37
packages/sim-entrada-eventos/aplication/SimController.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Request, Response } from "express"
|
||||
import { SimUsecases } from "aplication/Sim.usecases"
|
||||
|
||||
export class SimController {
|
||||
private simUseCases: SimUsecases
|
||||
|
||||
constructor(args: {
|
||||
simUseCases: SimUsecases
|
||||
}) {
|
||||
this.simUseCases = args.simUseCases
|
||||
}
|
||||
|
||||
async activation(req: Request, res: Response) {
|
||||
const { iccid } = req.body
|
||||
|
||||
if (iccid == undefined) {
|
||||
// TODO: excepcion con nombre se va a repetir
|
||||
res.status(400).json({
|
||||
msg: "iccid invalido"
|
||||
})
|
||||
}
|
||||
|
||||
const resp = await this.simUseCases.activation({ iccid })
|
||||
}
|
||||
|
||||
cancelation(req: Request, res: Response) {
|
||||
|
||||
}
|
||||
|
||||
pause(req: Request, res: Response) {
|
||||
|
||||
}
|
||||
|
||||
free(req: Request, res: Response) {
|
||||
|
||||
}
|
||||
}
|
||||
21
packages/sim-entrada-eventos/config/env/index.ts
vendored
Normal file
21
packages/sim-entrada-eventos/config/env/index.ts
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
import { loadEnvFile } from "node:process";
|
||||
loadEnvFile("../../.env")
|
||||
|
||||
export const env = {
|
||||
ENVIRONMENT: process.env.ENVIORMENT,
|
||||
POSTGRES_USER: process.env.POSTGRES_USER,
|
||||
POSTGRES_PASSWORD: process.env.POSTGRES_PASSWORD,
|
||||
POSTGRES_PORT: process.env.POSTGRES_PORT,
|
||||
POSTGRES_HOST: process.env.POSTGRES_HOST,
|
||||
POSTGRES_DATABASE: process.env.POSTGRES_DATABASE,
|
||||
RABBITMQ_HOST: String(process.env.RABBITMQ_HOST ?? "localhost"),
|
||||
RABBITMQ_USER: String(process.env.RABBITMQ_USER ?? "guest"),
|
||||
RABBITMQ_PASSWORD: String(process.env.RABBITMQ_PASSWORD ?? "guest"),
|
||||
RABBITMQ_EXCHANGE: String(process.env.RABBITMQ_EXCHANGE ?? "/"),
|
||||
RABBITMQ_PORT: parseInt(process.env.RABBITMQ_PORT ?? "5672"),
|
||||
RABBITMQ_MODULENAME: process.env.MODULENAME,
|
||||
RABBITMQ_TTL: process.env.RABBITMQ_TTL,
|
||||
RABBITMQ_SECURE: process.env.RABBITMQ_SECURE,
|
||||
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
|
||||
RABBITMQ_VHOST: String(process.env.RABBITMQ_VHOST),
|
||||
};
|
||||
50
packages/sim-entrada-eventos/index.ts
Normal file
50
packages/sim-entrada-eventos/index.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { env } from "#config/env"
|
||||
import { SimEvents } from "#shared/domain/SimEvents"
|
||||
import { RabbitMQEventBus, RMQConnectionParams } from "#shared/infrastructure/RabbitMQEventBus"
|
||||
|
||||
const rmqUser = env.RABBITMQ_USER
|
||||
const rmqPass = env.RABBITMQ_PASSWORD
|
||||
const rmqHost = env.RABBITMQ_HOST
|
||||
const rmqPort = Number(env.RABBITMQ_PORT)
|
||||
const rmqSecure = false
|
||||
const rmqVhost = env.RABBITMQ_VHOST
|
||||
|
||||
|
||||
|
||||
async function test() {
|
||||
const connOptions = <RMQConnectionParams>{
|
||||
username: rmqUser,
|
||||
password: rmqPass,
|
||||
vhost: rmqVhost,
|
||||
hostname: rmqHost,
|
||||
port: rmqPort,
|
||||
secure: rmqSecure,
|
||||
}
|
||||
|
||||
const event = <SimEvents.activation>{
|
||||
key: "sim.activation",
|
||||
payload: {
|
||||
iccid: "1234"
|
||||
},
|
||||
options: {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
const rmqCli = new RabbitMQEventBus({
|
||||
connectionParams: connOptions
|
||||
})
|
||||
|
||||
await rmqCli.connect()
|
||||
|
||||
console.log("publicando", event)
|
||||
rmqCli.publish([event])
|
||||
.then(e => {
|
||||
console.log("Mensaje publicado", e)
|
||||
})
|
||||
.catch(err => console.error)
|
||||
}
|
||||
|
||||
test()
|
||||
|
||||
export default {}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { Router } from 'express';
|
||||
|
||||
const simRoutes = Router()
|
||||
|
||||
simRoutes.get("/status")
|
||||
|
||||
simRoutes.post("/save", (req, res) => {
|
||||
|
||||
})
|
||||
simRoutes.post("/activate", (req, res) => {
|
||||
const { iccid } = req.body
|
||||
})
|
||||
simRoutes.post("/pause", (req, res) => {
|
||||
})
|
||||
|
||||
simRoutes.post("/cancel", (req, res) => {
|
||||
})
|
||||
|
||||
// Proceso especifico de ALAI para liberar sims canceladas
|
||||
simRoutes.post("/free", (req, res) => {
|
||||
})
|
||||
|
||||
32
packages/sim-entrada-eventos/package.json
Normal file
32
packages/sim-entrada-eventos/package.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "sim-entrada-eventos",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"dev": "tsx watch index.ts"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"packageManager": "yarn@4.12.0",
|
||||
"dependencies": {
|
||||
"@tsconfig/node22": "*",
|
||||
"amqplib": "^0.10.9",
|
||||
"cors": "*",
|
||||
"dotenv": "*",
|
||||
"express": "*",
|
||||
"typescript": "*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/amqplib": "^0.10.8",
|
||||
"@types/cors": "*",
|
||||
"@types/express": "*",
|
||||
"@types/node": "*",
|
||||
"@types/supertest": "*",
|
||||
"prettier": "*",
|
||||
"supertest": "*",
|
||||
"tsx": "*",
|
||||
"vitest": "*"
|
||||
}
|
||||
}
|
||||
37
packages/sim-entrada-eventos/tsconfig.json
Normal file
37
packages/sim-entrada-eventos/tsconfig.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../dist/sim-entrada-eventos",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"#config/*": [
|
||||
"config/*"
|
||||
],
|
||||
"#adapters/*": [
|
||||
"adapters/*"
|
||||
],
|
||||
"#domain/*": [
|
||||
"domain/*"
|
||||
],
|
||||
"#ports/*": [
|
||||
"ports/*"
|
||||
],
|
||||
"#tests/*": [
|
||||
"__tests__/*"
|
||||
],
|
||||
"#shared/*": [
|
||||
"../shared/*"
|
||||
],
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
],
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
"src/**/*.d.ts"
|
||||
],
|
||||
"files": [
|
||||
"index.ts"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user