import { UserInputError } from 'apollo-server-express'; import { Arg, Query, Resolver } from 'type-graphql'; import { getRepository } from 'typeorm'; import { merge } from 'lodash'; import { RetailerProductVariant } from '@/entities'; import { connectionFromQuery } from '../shared/pagination/utils'; import { DEFAULT_RETAILER_PRODUCT_VARIANT_INPUT, RetailerProductVariantConnection, RetailerProductVariantInput, RetailerProductVariantPayload, } from './types'; @Resolver(RetailerProductVariant) export class RetailerProductVariantResolver { @Query(() => RetailerProductVariantPayload, { nullable: false, description: `Retailer product variant.`, }) async retailerProductVariant( @Arg('input', { nullable: false }) inputWithoutDefaults: RetailerProductVariantInput ): Promise { const input = merge( {}, DEFAULT_RETAILER_PRODUCT_VARIANT_INPUT, inputWithoutDefaults ); const { id } = input; if (!id) { throw new UserInputError( 'Must provide an ID when getting a specific retailer product variant' ); } const retailerProductVariant = await RetailerProductVariant.findOneOrFail( input.id ); return { retailerProductVariant, }; } @Query(() => RetailerProductVariantConnection, { nullable: true }) async retailerProductVariants( @Arg('first', { nullable: true }) first?: number, @Arg('last', { nullable: true }) last?: number, @Arg('before', { nullable: true }) before?: string, @Arg('after', { nullable: true }) after?: string ): Promise { const query = getRepository(RetailerProductVariant).createQueryBuilder( 'RetailerProductVariant' ); return connectionFromQuery({ first, last, before, after }, query); } }