@ptc-org/nestjs-query-graphql
Version:
Nestjs graphql query adapter
57 lines (56 loc) • 3.07 kB
TypeScript
import { Class, DeepPartial, QueryService } from '@ptc-org/nestjs-query-core';
import { BaseResolverOptions } from '../decorators/resolver-method.decorator';
import { ConnectionOptions, PagingStrategies } from '../types';
import { AggregateResolver, AggregateResolverOpts } from './aggregate.resolver';
import { CreateResolver, CreateResolverOpts } from './create.resolver';
import { DeleteResolver, DeleteResolverOpts } from './delete.resolver';
import { ReadResolverFromOpts, ReadResolverOpts } from './read.resolver';
import { ReferenceResolverOpts } from './reference.resolver';
import { MergePagingStrategyOpts, ResolverClass } from './resolver.interface';
import { UpdateResolver, UpdateResolverOpts } from './update.resolver';
export interface CRUDResolverOpts<DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO>, R extends ReadResolverOpts<DTO> = ReadResolverOpts<DTO>, PS extends PagingStrategies = PagingStrategies.CURSOR> extends BaseResolverOptions, Pick<ConnectionOptions, 'enableTotalCount'> {
/**
* The DTO that should be used as input for create endpoints.
*/
CreateDTOClass?: Class<C>;
/**
* The DTO that should be used as input for update endpoints.
*/
UpdateDTOClass?: Class<U>;
/**
* The DTO that should be used for filter of the aggregate endpoint.
*/
AggregateDTOClass?: Class<DTO>;
enableSubscriptions?: boolean;
pagingStrategy?: PS;
enableAggregate?: boolean;
create?: CreateResolverOpts<DTO, C>;
read?: R;
update?: UpdateResolverOpts<DTO, U>;
delete?: DeleteResolverOpts<DTO>;
referenceBy?: ReferenceResolverOpts;
aggregate?: AggregateResolverOpts<DTO>;
}
export interface CRUDResolver<DTO, C, U, R extends ReadResolverOpts<DTO>, QS extends QueryService<DTO, C, U> = QueryService<DTO, C, U>> extends CreateResolver<DTO, C, QS>, ReadResolverFromOpts<DTO, R, QS>, UpdateResolver<DTO, U, QS>, DeleteResolver<DTO, QS>, AggregateResolver<DTO, QS> {
}
/**
* Factory to create a resolver that includes all CRUD methods from [[CreateResolver]], [[ReadResolver]],
* [[UpdateResolver]], and [[DeleteResolver]].
*
* ```ts
* import { CRUDResolver } from '@ptc-org/nestjs-query-graphql';
* import { Resolver } from '@nestjs/graphql';
* import { TodoItemDTO } from './dto/todo-item.dto';
* import { TodoItemService } from './todo-item.service';
*
* @Resolver()
* export class TodoItemResolver extends CRUDResolver(TodoItemDTO) {
* constructor(readonly service: TodoItemService) {
* super(service);
* }
* }
* ```
* @param DTOClass - The DTO Class that the resolver is for. All methods will use types derived from this class.
* @param opts - Options to customize the resolver.
*/
export declare const CRUDResolver: <DTO, C = DeepPartial<DTO>, U = DeepPartial<DTO>, R extends ReadResolverOpts<DTO> = ReadResolverOpts<DTO>, PS extends PagingStrategies = PagingStrategies.CURSOR>(DTOClass: Class<DTO>, opts?: CRUDResolverOpts<DTO, C, U, R, PS>) => ResolverClass<DTO, QueryService<DTO, C, U>, CRUDResolver<DTO, C, U, MergePagingStrategyOpts<DTO, R, PS>>>;