1.0.0 • Published 10 months ago

@seyte/nestjs-criteria-pattern v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

Seyte. NestJS Patrón Criteria

Instalación

npm install @seyte/nestjs-criteria-pattern

¿Como usar?

  1. 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
        ...
    ],
    ...
})
  1. 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,
    };
  }
}