Home > Software engineering >  GraphQLError: Syntax Error: Expected Name, found ")"
GraphQLError: Syntax Error: Expected Name, found ")"

Time:01-31

I keep getting this error supposedly coming from typeDefs

import gql from 'graphql-tag';

const typeDefs = gql`
  type CustomerService {
    findAll(): [CustomerEntity]
    findOne(id: String!): CustomerEntity
    createCustomer(input: CreateCustomerInput!): CustomerEntity
    updateCustomer(id: String!, input: UpdateCustomerInput!): CustomerEntity
    deleteCustomer(id: String!): Boolean
  }

  type Query {
    customers: [CustomerEntity]
    customer(id: String!): CustomerEntity
  }

  type Mutation {
    createCustomer(input: CreateCustomerInput!): CustomerEntity
    updateCustomer(id: String!, input: UpdateCustomerInput!): CustomerEntity
    deleteCustomer(id: String!): Boolean
  }

  type CustomerEntity {
    id: String
    name: String
    email: String
  }

  input CreateCustomerInput {
    name: String!
    email: String!
  }

  input UpdateCustomerInput {
    name: String
    email: String
  }
`;

export default typeDefs;

here goes my service

import { Injectable } from '@nestjs/common';
import { CustomerEntity } from './entities/customer.entity';
import { CreateCustomerInput } from './dto/create-customer.input';
import { UpdateCustomerInput } from './dto/update-customer.input';
import { Sales } from '../sales/entity/sales.entity';

@Injectable()
export class CustomerService {
  private customers: CustomerEntity[] = [];

  async createCustomer(input: CreateCustomerInput): Promise<CustomerEntity> {
    const customer = new CustomerEntity();
    customer.id = (this.customers.length   1).toString();
    customer.firstName = input.firstName;
    customer.lastName = input.lastName;
    customer.email = input.email;
    customer.password = input.password;
    customer.sales = [new Sales()];
    this.customers.push(customer);
    return customer;
  }

  async findAll(): Promise<CustomerEntity[]> {
    return this.customers;
  }

  async findOne(id: string): Promise<CustomerEntity> {
    return this.customers.find((customer) => customer.id === id);
  }

  async updateCustomer(
    id: string,
    input: UpdateCustomerInput,
  ): Promise<CustomerEntity> {
    const customerIndex = this.customers.findIndex(
      (customer) => customer.id === id,
    );
    if (customerIndex === -1) {
      throw new Error('Customer not found');
    }

    const customer = this.customers[customerIndex];
    if (input.firstName) {
      customer.firstName = input.firstName;
    }
    if (input.lastName) {
      customer.lastName = input.lastName;
    }
    if (input.email) {
      customer.email = input.email;
    }
    if (input.password) {
      customer.password = input.password;
    }

    this.customers[customerIndex] = customer;
    return customer;
  }

  async deleteCustomer(id: string): Promise<boolean> {
    const customerIndex = this.customers.findIndex(
      (customer) => customer.id === id,
    );
    if (customerIndex === -1) {
      throw new Error('Customer not found');
    }

    this.customers.splice(customerIndex, 1);
    return true;
  }
}

resolver:

/* eslint-disable @typescript-eslint/no-unused-vars */
import { IResolvers } from '@graphql-tools/utils';
import { CustomerService } from './customer.service';

export class CustomerResolver implements IResolvers {
  [key: string]: any;

  constructor(private readonly customerService: CustomerService) {}

  Query = {
    customers: async (root, args, context, info) => {
      return this.customerService.findAll();
    },
    customer: async (root, { id }, context, info) => {
      return this.customerService.findOne(id);
    },
  };

  Mutation = {
    createCustomer: async (root, { input }, context, info) => {
      return this.customerService.createCustomer(input);
    },
    updateCustomer: async (root, { id, input }, context, info) => {
      return this.customerService.updateCustomer(id, input);
    },
    deleteCustomer: async (root, { id }, context, info) => {
      return this.customerService.deleteCustomer(id);
    },
  };
}

I keep getting this error:

return new _GraphQLError.GraphQLError(`Syntax Error: ${description}`, {
         ^
GraphQLError: Syntax Error: Expected Name, found ")".

CodePudding user response:

Your findAll field of the CustomerService type does not have any arguments. Hence, the parenthesis does not make sense. You have to remove them.

type CustomerService {
    findAll: [CustomerEntity]
    findOne(id: String!): CustomerEntity
    createCustomer(input: CreateCustomerInput!): CustomerEntity
    updateCustomer(id: String!, input: UpdateCustomerInput!): CustomerEntity
    deleteCustomer(id: String!): Boolean
  }
  • Related