import { UserInputError } from 'apollo-server-express'; import { Arg, Query, Resolver } from 'type-graphql'; import { getRepository } from 'typeorm'; import { merge } from 'lodash'; import { RetailerProduct } from '@/entities'; import { connectionFromQuery } from '../shared/pagination/utils'; import { DEFAULT_RETAILER_PRODUCT_INPUT, RetailerProductConnection, RetailerProductInput, RetailerProductPayload, } from './types'; @Resolver(RetailerProduct) export class RetailerProductResolver { @Query(() => RetailerProductPayload, { nullable: false, description: `Retailer product.`, }) async retailerProduct( @Arg('input', { nullable: false }) inputWithoutDefaults: RetailerProductInput ): Promise { const input = merge( {}, DEFAULT_RETAILER_PRODUCT_INPUT, inputWithoutDefaults ); const { id } = input; if (!id) { throw new UserInputError( 'Must provide an ID when getting a specific retailer product' ); } const retailerProduct = await RetailerProduct.findOneOrFail(input.id); return { retailerProduct, }; } @Query(() => RetailerProductConnection, { nullable: true }) async retailerProducts( @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(RetailerProduct).createQueryBuilder('RetailerProduct'); return connectionFromQuery({ first, last, before, after }, query); } }