@ptc-org/nestjs-query-graphql
Version:
Nestjs graphql query adapter
54 lines (53 loc) • 2.62 kB
TypeScript
import { Class, DeepPartial, Filter, QueryService } from '@ptc-org/nestjs-query-core';
import { CreateManyInputType, CreateOneInputType, MutationArgsType, SubscriptionArgsType } from '../types';
import { ResolverClass, ServiceResolver, SubscriptionResolverOpts } from './resolver.interface';
export type CreatedEvent<DTO> = {
[eventName: string]: DTO;
};
export interface CreateResolverOpts<DTO, C = DeepPartial<DTO>> extends SubscriptionResolverOpts {
/**
* The Input DTO that should be used to create records.
*/
CreateDTOClass?: Class<C>;
/**
* The class to be used for `createOne` input.
*/
CreateOneInput?: Class<CreateOneInputType<C>>;
/**
* The class to be used for `createMany` input.
*/
CreateManyInput?: Class<CreateManyInputType<C>>;
createOneMutationName?: string;
createManyMutationName?: string;
}
export interface CreateResolver<DTO, C, QS extends QueryService<DTO, C, unknown>> extends ServiceResolver<DTO, QS> {
createOne(input: MutationArgsType<CreateOneInputType<C>>, authorizeFilter?: Filter<DTO>): Promise<DTO>;
createMany(input: MutationArgsType<CreateManyInputType<C>>, authorizeFilter?: Filter<DTO>): Promise<DTO[]>;
createdSubscription(input?: SubscriptionArgsType<DTO>, authorizeFilter?: Filter<DTO>): AsyncIterator<CreatedEvent<DTO>>;
}
/**
* @internal
* Mixin to add `create` graphql endpoints.
*/
export declare const Creatable: <DTO, C, QS extends QueryService<DTO, C, unknown>>(DTOClass: Class<DTO>, opts: CreateResolverOpts<DTO, C>) => <B extends Class<ServiceResolver<DTO, QS>>>(BaseClass: B) => Class<CreateResolver<DTO, C, QS>> & B;
/**
* Factory to create a new abstract class that can be extended to add `create` endpoints.
*
* Assume we have `TodoItemDTO`, you can create a resolver with `createOneTodoItem` and `createManyTodoItems` graphql
* query endpoints using the following code.
*
* ```ts
* @Resolver()
* export class TodoItemResolver extends CreateResolver(TodoItemDTO) {
* constructor(readonly service: TodoItemService) {
* super(service);
* }
* }
* ```
*
* @param DTOClass - The DTO class that should be returned from the `createOne` and `createMany` endpoint.
* @param opts - Options to customize endpoints.
* @typeparam DTO - The type of DTO that should be created.
* @typeparam C - The create DTO type.
*/
export declare const CreateResolver: <DTO, C = DeepPartial<DTO>, QS extends QueryService<DTO, C, unknown> = QueryService<DTO, C, unknown>>(DTOClass: Class<DTO>, opts?: CreateResolverOpts<DTO, C>) => ResolverClass<DTO, QS, CreateResolver<DTO, C, QS>>;