⚠️ Es importante tener en cuenta que este módulo se encuentra implementado en el package@tresdoce-nestjs-toolkit/paas
, ya que es una funcionalidad core para el starter.
Este módulo está pensada para ser utilizada en NestJS Starter, o cualquier proyecto que utilice una configuración centralizada, siguiendo la misma arquitectura del starter.
Glosario
📝 Requerimientos básicos
- NestJS Starter
- Node.js v18.17.0 or higher (Download)
- YARN v1.22.18 or higher
- NPM v9.6.7 or higher
- NestJS v10.3.0 or higher (Documentación)
🛠️ Instalar dependencia
npm install -S @tresdoce-nestjs-toolkit/core
yarn add @tresdoce-nestjs-toolkit/core
👨💻 Uso
Validation Schema
La validación del los parámetros (envs
) que requiere la aplicación son validados por medio de la función
validateSchemaForApp
, esta tienen integrado la validación los schemas obligatorios y base para la app.
ValidationSchema for App
// ./src/config/validationSchema.ts
import Joi from 'joi';
import { validateSchemaForApp } from '@tresdoce-nestjs-toolkit/core';
export const validationSchema = validateSchemaForApp({
// Custom parameters
TEST_KEY: Joi.string().optional(),
RICK_AND_MORTY_API_URL: Joi.string().required(),
RICK_AND_MORTY_API_URL_LIVENESS: Joi.string().required(),
});
corePathsExcludes
Es una variable que contiene una lista de paths
con sus methods
con el fin de ser excluidos tanto del prefix
de la
app, como asi también de otras funcionalidades para que no generen registros innecesarios, como puede ser el caso de
los logs
con los endpoints del helath
.
// ./src/main.ts
import { corePathsExcludes } from '@tresdoce-nestjs-toolkit/core';
async function bootstrap() {
//...
app.setGlobalPrefix(`${server.context}`, {
exclude: [...corePathsExcludes()],
});
//...
}
setHttpsOptions
Para implementar SSL
en la app, se requiere tener la ruta del cert
y la privKey
para poder instanciarlo en los
options.
// ./src/main.ts
import { setHttpsOptions } from '@tresdoce-nestjs-toolkit/core';
const certPath = './path/to/secrets/public-certificate.pem';
const pkeyPath = './path/to/secrets/private-key.pem';
async function bootstrap() {
//...
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
httpsOptions: setHttpsOptions(certPath, pkeyPath),
});
}
//...
}
Decorators
Public
Decorador para definir si un endpoint es público.
// ./src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { Public } from '@tresdoce-nestjs-toolkit/core';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
// Publico
@Get('')
@Public()
getTestEnv(): string {
return this.appService.getTestEnv();
}
// Privado
@Get('my-util')
getMyUtil() {
return this.appService.getMyCustomUtil();
}
}
Roles
Decorador para definir el metadata de roles.
// ./src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { Roles } from '@tresdoce-nestjs-toolkit/core';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
// Only user role
@Get('')
@Roles('user')
getTestEnv(): string {
return this.appService.getTestEnv();
}
// Only user and admin role
@Get('my-util')
@Roles('user', 'admin')
getMyUtil() {
return this.appService.getMyCustomUtil();
}
}
📄 Changelog
Todos los cambios notables de este paquete se documentarán en el archivo Changelog.