src/functions concentra utilidades compartidas que pueden usarse desde distintos módulos sin mezclar responsabilidades con controllers o queries. Los archivos de esta carpeta reúnen métodos utilitarios por propósito.
Convenciones obligatorias
- Nombres de archivo: utiliza
[nombre].function.tsenkebab-case:date.function.ts,pagination.function.ts,string.function.ts. - Nombre de clase: exporta
[Nombre]Functionen PascalCase, por ejemploDateFunctionoPaginationFunction. - Métodos estáticos: las operaciones reutilizables se exponen como métodos
static; se invocan sin instanciar la clase, comoPaginationFunction.createPaginationMeta(...). - Responsabilidad única por clase: agrupa operaciones relacionadas (fechas, cadenas, paginación, errores). Evita convertir una clase de utilidades en un conjunto de funciones sin relación.
- Trazabilidad: los métodos públicos instrumentados usan
@Trace({ name: '...', type: 'method' })detraceflow, siguiendo los ejemplos. Evita generar spans redundantes en cada paso interno recursivo. - Tipos explícitos: declara los parámetros y resultados; prefiere tipos concretos o genéricos frente a
anyal crear nuevos métodos. Mantén la misma estructura de retorno que esperan los DTO. - Sin responsabilidades de módulo: no declares rutas HTTP, no registres providers NestJS y no ejecutes consultas de tablas desde estas utilidades. El acceso a datos pertenece a
src/queries.
Ejemplo mínimo
pagination.function.ts
pagination.function.ts para el código completo.
Utilidades documentadas
Uso en módulos
Los services pueden apoyarse en estas clases para sanitizar entradas, crearmeta de paginación o normalizar errores. En una operación de negocio, el service decide cuándo llamarlas; la utility solo resuelve su tarea concreta.
No confundas esta convención con src/core: los archivos *.function.ts pueden tener varios métodos estáticos de la misma clase. La regla de una sola función setupX(app) corresponde exclusivamente a *.core.ts.
