Skip to main content

v0.23.x to v0.24.x

Removed Public ConnectionType and SortType function.

In versions prior to v0.24.0 the ConnectionType and SortType functions could be used to get a reference to a Connection and Sort graphql implementation. In v0.24.0 there public methods were removed in favor of pulling them off of the QueryArgs.

This change was made to remove possibility of creating ConnectionTypes and SortTypes that are incompatible with the QueryArgsType.

Old

import { ConnectionType, SortType } from '@ptc-org/nestjs-query-graphql';
import { TodoItemDTO } from './dto/todo-item.dto';

export const TodoItemConnection = ConnectionType(TodoItemDTO);
export const TodoItemSort = SortType(TodoItemDTO);

New

import { QueryArgsType } from '@ptc-org/nestjs-query-graphql';
import { TodoItemDTO } from './dto/todo-item.dto';

export const TodoItemQueryArgs = QueryArgsType(TodoItemDTO)
export const TodoItemConnection = TodoItemQueryArgs.ConnectionType;
export const TodoItemSort = TodoItemQueryArgs.SortType;

@QueryOptions Decorator

In previous versions you had to specify options for querying and connections in your resolver. In v0.24.0 a new @QueryOptions decorator was introduced to allow specifying all query related options along side the DTO, instead of splitting the configuration between the resolver and DTO. The new @QueryOptions provides a few benefits.

  • Better re-use across types by avoiding passing configuration options all the way through the code to each piece that may need them.
  • Decoupling query options from the resolver. This puts us in a better position to decouple the DTO definition from the transport layer (e.g. graphql)
  • Keeps DTO configuration options closer to the source.

Old

todo-item.module.ts
import { NestjsQueryGraphQLModule } from '@ptc-org/nestjs-query-graphql';
import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { Module } from '@nestjs/common';
import { TodoItemDTO } from './todo-item.dto';
import { TodoItemEntity } from './todo-item.entity';

@Module({
imports: [
NestjsQueryGraphQLModule.forFeature({
imports: [NestjsQueryTypeOrmModule.forFeature([TodoItemEntity])],
resolvers: [{
DTOClass: TodoItemDTO,
EntityClass: TodoItemEntity,
pagingStrategy: PagingStrategies.OFFSET,
enableTotalCount: true,
defaultResultSize: 5,
maxResultSize: 100,
defaultFilter: { completed: { is: true } },
defaultSort: [{ field: 'title', direction: SortDirection.ASC }],
}],
}),
],
})
export class TodoItemModule {}

New

todo-item.dto.ts
import { FilterableField, QueryOptions, PagingStrategies } from '@ptc-org/nestjs-query-graphql';
import { ObjectType, ID, GraphQLISODateTime, Field } from '@nestjs/graphql';

@ObjectType('TodoItem')
@QueryOptions({
pagingStrategy: PagingStrategies.OFFSET, // use offset based paging for this DTO
enableTotalCount: true, // enable querying for totalCount
defaultResultSize: 5, // return 5 records by default
maxResultSize: 100, // do not allow querying for more than 100 records at a time
defaultFilter: { completed: { is: true } }, // default filter when one is not provided
defaultSort: [{ field: 'title', direction: SortDirection.ASC }], // default sort when one is not provided.
})
export class TodoItemDTO {
@FilterableField(() => ID)
id!: string;

@FilterableField()
title!: string;

@FilterableField()
completed!: boolean;

@FilterableField(() => GraphQLISODateTime)
created!: Date;

@FilterableField(() => GraphQLISODateTime)
updated!: Date;
}