graphql必填字段方法

时间:2017-05-26 17:50:14

标签: graphql apollo apollo-server

这是我的graphql架构,查询和突变。

我使用"!"

在我的架构中标记了必填字段

如何创建突变以添加新客户端?

我真的需要再次写相同的必填字段吗?

createClient(contactMethod: String!, hearAbout: String! ......... ): Client

const typeShard = `
  type ClientProfile {
    name: String!
    surname: String!
    address: String
    language: String!
  }

  type Client {
    _id: String
    isEdit: Boolean
    createdAt: String
    shortId: Int
    profile: ClientProfile
    comments: String
    contactMethod: String!
    hearAbout: String!
    leadAgentId: String
    branchId: String!
  }
`;

const queryShard = `
  getAllClients: [Client]
`;

const mutationShard = `
  removeClient(shortId : Int!): Client
  createClient(contactMethod: String!, hearAbout: String!   .........  ): Client
`;

const resolvers = {
  Query: {
    getAllClients: () => MongoClients.find().fetch(),
  },
  Mutation: {
    removeClient(root, { shortId }) {
      const client = MongoClients.findOne({ shortId });
      if (!client) throw new Error(`Couldn't find client with id ${shortId}`);
      MongoClients.remove({ shortId });
      return client;
    },
    createClient: (_, args) => {
      return MongoClients.insert(args);
    },
  },
};

1 个答案:

答案 0 :(得分:1)

您不需要为每个突变编写相同的字段。您可以定义input类型。请查看此cheat sheet

所以在你的情况下它可能看起来像:

const typeShard = `
  type ClientProfile {
    name: String!
    surname: String!
    address: String
    language: String!
  }

  type Client {
    _id: String
    isEdit: Boolean
    createdAt: String
    shortId: Int
    profile: ClientProfile
    comments: String
    contactMethod: String!
    hearAbout: String!
    leadAgentId: String
    branchId: String!
  }
  input ClientInput {
    contactMethod: String!
    hearAbout: String!
    .....
  }
`;

const mutationShard = `
  removeClient(shortId : Int!): Client
  createClient(clientInput: ClientInput!): Client
`;