--- name: graphql-development description: GraphQL schema design, resolvers, and client integration. Use for building GraphQL APIs and front-end queries. --- # 🔗 GraphQL Development Skill ## Schema Design ### Types ```graphql type User { id: ID! name: String! email: String! posts: [Post!]! createdAt: DateTime! } type Post { id: ID! title: String! content: String! author: User! published: Boolean! } input CreatePostInput { title: String! content: String! } ``` ### Queries & Mutations ```graphql type Query { users: [User!]! user(id: ID!): User posts(published: Boolean): [Post!]! } type Mutation { createUser(name: String!, email: String!): User! createPost(input: CreatePostInput!): Post! deletePost(id: ID!): Boolean! } type Subscription { postCreated: Post! } ``` --- ## Server Setup (Apollo) ```typescript import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; const typeDefs = `#graphql type Query { hello: String } `; const resolvers = { Query: { hello: () => 'Hello, world!' } }; const server = new ApolloServer({ typeDefs, resolvers }); const { url } = await startStandaloneServer(server, { listen: { port: 4000 } }); ``` --- ## Resolvers Pattern ```typescript const resolvers = { Query: { users: async (_, __, { dataSources }) => { return dataSources.userAPI.getUsers(); }, user: async (_, { id }, { dataSources }) => { return dataSources.userAPI.getUser(id); } }, User: { posts: async (parent, _, { dataSources }) => { return dataSources.postAPI.getPostsByUser(parent.id); } }, Mutation: { createUser: async (_, { name, email }, { dataSources }) => { return dataSources.userAPI.createUser({ name, email }); } } }; ``` --- ## Client Queries ```typescript import { gql, useQuery, useMutation } from '@apollo/client'; const GET_USERS = gql` query GetUsers { users { id name email } } `; function Users() { const { loading, error, data } = useQuery(GET_USERS); if (loading) return
Loading...
; if (error) returnError: {error.message}
; return data.users.map(user =>