@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.
Downloads
1
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,
};
}
}