Template del servicio de SIM
This commit is contained in:
7
packages/shared/config/env/env-validators.ts
vendored
Normal file
7
packages/shared/config/env/env-validators.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
import { makeValidator } from 'envalid';
|
||||
|
||||
import { isValidEnvString, isValidEnvStringArray } from '#shared/domain/utils/env-validators';
|
||||
|
||||
export const ensureEnvStringArray = makeValidator((value: unknown) => isValidEnvStringArray(value));
|
||||
|
||||
export const ensureEnvString = makeValidator((value: unknown) => isValidEnvString(value));
|
||||
45
packages/shared/config/env/index.ts
vendored
Normal file
45
packages/shared/config/env/index.ts
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import { bool, cleanEnv, num, port, str } from 'envalid';
|
||||
|
||||
import { USER_ROLES } from '#shared/domain/models/authorizer-user.entity';
|
||||
|
||||
import { ensureEnvString } from './env-validators';
|
||||
|
||||
export const env = cleanEnv(process.env, {
|
||||
ENVIRONMENT: str({
|
||||
choices: ['local', 'development', 'production']
|
||||
}),
|
||||
USE_IN_MEMORY_REPOSITORIES: bool(),
|
||||
ALERTS_API_PORT: port(),
|
||||
COMPANIES_COMMAND_URL: ensureEnvString(),
|
||||
DEVICES_COMMAND_URL: ensureEnvString(),
|
||||
USERS_COMMAND_URL: ensureEnvString(),
|
||||
REDIS_PASSWORD: ensureEnvString(),
|
||||
REDIS_PORT: port(),
|
||||
REDIS_HOST: ensureEnvString(),
|
||||
POSTGRES_USER: ensureEnvString(),
|
||||
POSTGRES_PASSWORD: ensureEnvString(),
|
||||
POSTGRES_PORT: port(),
|
||||
POSTGRES_HOST: ensureEnvString(),
|
||||
POSTGRES_DATABASE: ensureEnvString(),
|
||||
RABBITMQ_HOST: ensureEnvString(),
|
||||
RABBITMQ_USER: ensureEnvString(),
|
||||
RABBITMQ_PASSWORD: ensureEnvString(),
|
||||
RABBITMQ_EXCHANGE: ensureEnvString(),
|
||||
RABBITMQ_PORT: port(),
|
||||
RABBITMQ_MODULENAME: ensureEnvString(),
|
||||
RABBITMQ_TTL: port(),
|
||||
RABBITMQ_SECURE: bool(),
|
||||
RABBITMQ_RETRY_INTERVAL: num(),
|
||||
SYSTEM_USER_ID: ensureEnvString(),
|
||||
SYSTEM_USER_EMAIL: ensureEnvString(),
|
||||
SYSTEM_USER_ROLE: str({
|
||||
choices: [
|
||||
USER_ROLES.ADMIN,
|
||||
USER_ROLES.CLIENT,
|
||||
USER_ROLES.DELEGATION_MANAGER,
|
||||
USER_ROLES.OPERATOR,
|
||||
USER_ROLES.ROOM_STAFF
|
||||
],
|
||||
default: USER_ROLES.ADMIN
|
||||
})
|
||||
});
|
||||
12
packages/shared/config/event-bus/index.ts
Normal file
12
packages/shared/config/event-bus/index.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { env } from '#api/config/env';
|
||||
|
||||
export const eventBusConfig = {
|
||||
host: env.RABBITMQ_HOST,
|
||||
user: env.RABBITMQ_USER,
|
||||
password: env.RABBITMQ_PASSWORD,
|
||||
exchange: env.RABBITMQ_EXCHANGE,
|
||||
port: env.RABBITMQ_PORT,
|
||||
modulename: env.RABBITMQ_MODULENAME,
|
||||
ttl: env.RABBITMQ_TTL,
|
||||
secure: env.RABBITMQ_SECURE
|
||||
};
|
||||
2
packages/shared/index.ts
Normal file
2
packages/shared/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
console.log("shared")
|
||||
export default {}
|
||||
31
packages/shared/package.json
Normal file
31
packages/shared/package.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "sim-shared",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "src/app.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"dev": "tsx index.ts"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"private": true,
|
||||
"packageManager": "yarn@4.12.0",
|
||||
"dependencies": {
|
||||
"@tsconfig/node22": "*",
|
||||
"cors": "*",
|
||||
"dotenv": "*",
|
||||
"express": "*",
|
||||
"typescript": "*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cors": "*",
|
||||
"@types/express": "*",
|
||||
"@types/node": "*",
|
||||
"@types/supertest": "*",
|
||||
"prettier": "*",
|
||||
"supertest": "*",
|
||||
"tsx": "*",
|
||||
"vitest": "*"
|
||||
}
|
||||
}
|
||||
34
packages/shared/tsconfig.json
Normal file
34
packages/shared/tsconfig.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../dist/shared",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"#adapters/*": [
|
||||
"src/adapters/*"
|
||||
],
|
||||
"#domain/*": [
|
||||
"src/domain/*"
|
||||
],
|
||||
"#ports/*": [
|
||||
"src/ports/*"
|
||||
],
|
||||
"#tests/*": [
|
||||
"__tests__/*"
|
||||
],
|
||||
"#shared/*": [
|
||||
"./*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
],
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
"src/**/*.d.ts"
|
||||
],
|
||||
"files": [
|
||||
"index.ts"
|
||||
]
|
||||
}
|
||||
13
packages/sim-gestor-eventos/.env
Normal file
13
packages/sim-gestor-eventos/.env
Normal file
@@ -0,0 +1,13 @@
|
||||
ENVIORMENT=development
|
||||
|
||||
RABBITMQ_HOST=rabittmq-broker
|
||||
RABBITMQ_PORT=5672
|
||||
RABBITMQ_USER=guest
|
||||
RABBITMQ_PASSWORD=guest
|
||||
RABBITMQ_SECURE=false
|
||||
|
||||
POSTGRES_DATABASE=postres
|
||||
POSTGRES_HOST=postgresql-sim-1
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=postgres
|
||||
7
packages/sim-gestor-eventos/config/env/env-validators.ts
vendored
Normal file
7
packages/sim-gestor-eventos/config/env/env-validators.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
import { makeValidator } from 'envalid';
|
||||
|
||||
import { isValidEnvString, isValidEnvStringArray } from '#shared/domain/utils/env-validators';
|
||||
|
||||
export const ensureEnvStringArray = makeValidator((value: unknown) => isValidEnvStringArray(value));
|
||||
|
||||
export const ensureEnvString = makeValidator((value: unknown) => isValidEnvString(value));
|
||||
17
packages/sim-gestor-eventos/config/env/index.ts
vendored
Normal file
17
packages/sim-gestor-eventos/config/env/index.ts
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
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: process.env.RABBITMQ_HOST,
|
||||
RABBITMQ_USER: process.env.RABBITMQ_USER,
|
||||
RABBITMQ_PASSWORD: process.env.RABBITMQ_PASSWORD,
|
||||
RABBITMQ_EXCHANGE: process.env.RABBITMQ_EXCHANGE,
|
||||
RABBITMQ_PORT: process.env.RABBITMQ_PORT,
|
||||
RABBITMQ_MODULENAME: process.env.MODULENAME,
|
||||
RABBITMQ_TTL: process.env.RABBITMQ_TTL,
|
||||
RABBITMQ_SECURE: process.env.RABBITMQ_SECURE,
|
||||
RABBITMQ_RETRY_INTERVAL: process.env.RABBITMQ_INTERVAL,
|
||||
};
|
||||
12
packages/sim-gestor-eventos/config/event-bus/index.ts
Normal file
12
packages/sim-gestor-eventos/config/event-bus/index.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { env } from '#api/config/env';
|
||||
|
||||
export const eventBusConfig = {
|
||||
host: env.RABBITMQ_HOST,
|
||||
user: env.RABBITMQ_USER,
|
||||
password: env.RABBITMQ_PASSWORD,
|
||||
exchange: env.RABBITMQ_EXCHANGE,
|
||||
port: env.RABBITMQ_PORT,
|
||||
modulename: env.RABBITMQ_MODULENAME,
|
||||
ttl: env.RABBITMQ_TTL,
|
||||
secure: env.RABBITMQ_SECURE
|
||||
};
|
||||
43
packages/sim-gestor-eventos/index.ts
Normal file
43
packages/sim-gestor-eventos/index.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import client, { ChannelModel, connect, Connection } from "amqplib"
|
||||
import { env } from "config/env"
|
||||
import { Channel } from "node:diagnostics_channel"
|
||||
|
||||
const rmqUser = env.RABBITMQ_USER
|
||||
const rmqPass = env.RABBITMQ_PASSWORD
|
||||
const rmqHost = env.RABBITMQ_HOST
|
||||
const rmqPort = Number(env.RABBITMQ_PORT)
|
||||
const rmqSecure = env.RABBITMQ_SECURE
|
||||
|
||||
class RabbitConnection {
|
||||
connection?: Connection
|
||||
channel?: Channel
|
||||
connected: Boolean = false
|
||||
|
||||
|
||||
protected async createConnection(): Promise<ChannelModel> {
|
||||
const { hostname, port, secure } = { hostname: rmqHost, port: rmqPort, secure: rmqSecure }
|
||||
const { username, password } = { username: rmqUser, password: rmqPass };
|
||||
const protocol = secure ? 'amqps' : 'amqp';
|
||||
|
||||
const connection = await connect({
|
||||
protocol,
|
||||
hostname,
|
||||
port,
|
||||
username,
|
||||
password
|
||||
});
|
||||
|
||||
connection.on('error', (error: unknown) => {
|
||||
console.error(`[EVENT BUS] Rabbitmq connection error :: ${error}`);
|
||||
Promise.reject(error);
|
||||
});
|
||||
|
||||
return connection;
|
||||
}
|
||||
}
|
||||
|
||||
while (true) {
|
||||
console.log("test")
|
||||
}
|
||||
|
||||
export default {}
|
||||
32
packages/sim-gestor-eventos/package.json
Normal file
32
packages/sim-gestor-eventos/package.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "sim-gestor-eventos",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"dev": "tsx 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": "*"
|
||||
}
|
||||
}
|
||||
34
packages/sim-gestor-eventos/tsconfig.json
Normal file
34
packages/sim-gestor-eventos/tsconfig.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../dist/sim-gestor-eventos",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"#adapters/*": [
|
||||
"src/adapters/*"
|
||||
],
|
||||
"#domain/*": [
|
||||
"src/domain/*"
|
||||
],
|
||||
"#ports/*": [
|
||||
"src/ports/*"
|
||||
],
|
||||
"#tests/*": [
|
||||
"__tests__/*"
|
||||
],
|
||||
"#shared/*": [
|
||||
"../shared/*"
|
||||
],
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
],
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
"src/**/*.d.ts"
|
||||
],
|
||||
"files": [
|
||||
"index.ts"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user