Skip to main content

v0.11.2

ยท 2 min read

@InjectAssemblerQueryService#

In v0.11.1 a new @InjectAssemblerQueryService decorator has been introduced to reduce boiler plate code related to creating an AssemblerQueryService.

Example#

Define your assembler

todo-item.assembler.ts
import { Assembler, ClassTransformerAssembler } from '@nestjs-query/core';import { TodoItemDTO } from './todo-item.dto';import { TodoItemEntity } from './todo-item.entity';
@Assembler(TodoItemDTO, TodoItemEntity)export class TodoItemAssembler extends ClassTransformerAssembler<TodoItemDTO, TodoItemEntity> {  convertToDTO(entity: TodoItemEntity): TodoItemDTO {    const dto = super.convertToDTO(entity);    dto.age = Date.now() - entity.created.getMilliseconds();    return dto;  }}

Now, instead of defining an AssemblerQueryService you can use the decorator.

todo-item.resolver.ts
import { QueryService, InjectAssemblerQueryService } from '@nestjs-query/core';import { CRUDResolver } from '@nestjs-query/query-graphql';import { Resolver } from '@nestjs/graphql';import { TodoItemDTO } from './dto/todo-item.dto';
@Resolver(() => TodoItemDTO)export class TodoItemResolver extends CRUDResolver(TodoItemDTO) {  constructor(@InjectAssemblerQueryService(TodoItemAssembler) readonly service: QueryService<TodoItemDTO>) {    super(service);  }}

Using Assemblers in auto-generated Resolver#

There is a new AssemblerClass option when using the NestjsQueryGraphQLModule to generate your resolver to using a custom Assembler.

note

When using the AssemblerClass option you don't need to specify the entity.

todo-item.module.ts
import { NestjsQueryGraphQLModule } from '@nestjs-query/query-graphql';import { NestjsQueryTypeOrmModule } from '@nestjs-query/query-typeorm';import { Module } from '@nestjs/common';import { TodoItemDTO } from './dto/todo-item.dto';import { TodoItemEntity } from './todo-item.entity';import { TodoItemAssembler } from './todo-item.assembler';
@Module({  imports: [    NestjsQueryGraphQLModule.forFeature({      imports: [NestjsQueryTypeOrmModule.forFeature([TodoItemEntity])],      // Register the assembler      assemblers: [TodoItemAssembler],      resolvers: [        {          DTOClass: TodoItemDTO,          // specify the assembler type to use.          AssemblerClass: TodoItemAssembler,        },      ],    }),  ],})export class TodoItemModule {}

Using Services in auto-generated Resolver#

There is a new ServiceClass option when using the NestjsQueryGraphQLModule to generate your resolver to a custom QueryService.

note

When using the ServiceClass option you don't need to specify the entity.

todo-item.module.ts
import { NestjsQueryGraphQLModule } from '@nestjs-query/query-graphql';import { NestjsQueryTypeOrmModule } from '@nestjs-query/query-typeorm';import { Module } from '@nestjs/common';import { TodoItemDTO } from './dto/todo-item.dto';import { TodoItemEntity } from './todo-item.entity';import { TodoItemService } from './todo-item.service';
@Module({  imports: [    NestjsQueryGraphQLModule.forFeature({      imports: [NestjsQueryTypeOrmModule.forFeature([TodoItemEntity])],      // Register the the custom QueryService      services: [TodoItemService],      resolvers: [        {          DTOClass: TodoItemDTO,          // specify the QueryService type to use.          ServiceClass: TodoItemService,        },      ],    }),  ],})export class TodoItemModule {}