@seyte/nestjs-criteria-pattern
v1.0.0
Published
Libreria de Seyte que implementar el patrón Criteria con un transformador para un queryBuilder de TypeORM, con flexibilidad para implementar otros transformadores.
Readme
Seyte. NestJS Patrón Criteria
Instalación
npm install @seyte/nestjs-criteria-pattern¿Como usar?
- Importamos el módulo en aquel módulo donde vallamos hacer uso
// app.module.ts
import { CriteriaPatternModule } from '@seyte/nestjs-criteria-pattern';
@Module({
...,
imports: [
...,
CriteriaPatternModule
...
],
...
})- Hacemos uso del servicio para transformar el Dto de criteria en un querBuilder de TypeORM
2.1. Con "body" (requiere un método http que no sea get)
// app.controller.ts
import {
CriteriaBodyDto,
CriteriaTypeormTransformer,
} from '@seyte/nestjs-criteria-pattern';
import { Body, Controller, Get, Post, Scope } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
CriteriaBodyDto,
CriteriaTypeormTransformer,
} from '@seyte/nestjs-criteria-pattern';
import { User } from './entities/user.entity';
import { Repository } from 'typeorm';
@Controller({ path: 'app', scope: Scope.DEFAULT })
export class AppController {
constructor(
private readonly _criteriaTypeormTransformer: CriteriaTypeormTransformer,
@InjectRepository(User)
private readonly _userRepository: Repository<User>,
) {}
@Post('test')
async getTest(@Body() body: CriteriaBodyDto) {
const queryBuilder = this._criteriaTypeormTransformer.createQueryBuilder(
this._userRepository,
body,
);
const data = await queryBuilder.getMany();
return {
message: 'OK',
data,
};
}
}2.2. Con "query" (el dto se formará con query params)
// app.controller.ts
import {
CriteriaBodyDto,
CriteriaTypeormTransformer,
} from '@seyte/nestjs-criteria-pattern';
import { Body, Controller, Get, Post, Scope } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
CriteriaQueryDto,
CriteriaTypeormTransformer,
} from '@seyte/nestjs-criteria-pattern';
import { User } from './entities/user.entity';
import { Repository } from 'typeorm';
@Controller({ path: 'app', scope: Scope.DEFAULT })
export class AppController {
constructor(
private readonly _criteriaTypeormTransformer: CriteriaTypeormTransformer,
@InjectRepository(User)
private readonly _userRepository: Repository<User>,
) {}
@Get('test')
async getTest(@Query() query: CriteriaQueryDto) {
const queryBuilder = this._criteriaTypeormTransformer.createQueryBuilder(
this._userRepository,
query,
);
const data = await queryBuilder.getMany();
return {
message: 'OK',
data,
};
}
}