UNPKG

@ptc-org/nestjs-query-graphql

Version:
54 lines (53 loc) 2.62 kB
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>>;