| name | graphql-schema-generator |
| description | Generate GraphQL schemas, resolvers, and type definitions. Use when designing GraphQL APIs or documenting GraphQL schemas. |
GraphQL Schema Generator Skill
GraphQLスキーマを生成するスキルです。
概要
データモデルからGraphQLスキーマ、リゾルバーを自動生成します。
主な機能
- スキーマ定義: Type、Query、Mutation
- リゾルバー生成: 実装テンプレート
- ベストプラクティス: ページネーション、エラーハンドリング
- ドキュメント: 自動生成
生成例
Schema
# Types
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
createdAt: DateTime!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
published: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
}
type Query {
user(id: ID!): User
users(first: Int = 10, after: String): UserConnection!
post(id: ID!): Post
posts(published: Boolean): [Post!]!
}
type Mutation {
createUser(input: CreateUserInput!): User!
updateUser(id: ID!, input: UpdateUserInput!): User!
deleteUser(id: ID!): Boolean!
createPost(input: CreatePostInput!): Post!
publishPost(id: ID!): Post!
}
# Inputs
input CreateUserInput {
name: String!
email: String!
password: String!
}
input UpdateUserInput {
name: String
email: String
}
input CreatePostInput {
title: String!
content: String!
authorId: ID!
}
# Pagination
type UserConnection {
edges: [UserEdge!]!
pageInfo: PageInfo!
totalCount: Int!
}
type UserEdge {
node: User!
cursor: String!
}
type PageInfo {
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
endCursor: String
}
# Custom Scalars
scalar DateTime
Resolvers (JavaScript)
const resolvers = {
Query: {
user: async (parent, { id }, { dataSources }) => {
return dataSources.userAPI.getUserById(id);
},
users: async (parent, { first, after }, { dataSources }) => {
return dataSources.userAPI.getUsers({ first, after });
},
post: async (parent, { id }, { dataSources }) => {
return dataSources.postAPI.getPostById(id);
},
posts: async (parent, { published }, { dataSources }) => {
return dataSources.postAPI.getPosts({ published });
}
},
Mutation: {
createUser: async (parent, { input }, { dataSources }) => {
return dataSources.userAPI.createUser(input);
},
updateUser: async (parent, { id, input }, { dataSources }) => {
return dataSources.userAPI.updateUser(id, input);
},
deleteUser: async (parent, { id }, { dataSources }) => {
return dataSources.userAPI.deleteUser(id);
},
createPost: async (parent, { input }, { dataSources, user }) => {
if (!user) throw new Error('Unauthorized');
return dataSources.postAPI.createPost(input);
},
publishPost: async (parent, { id }, { dataSources, user }) => {
if (!user) throw new Error('Unauthorized');
return dataSources.postAPI.publishPost(id);
}
},
User: {
posts: async (parent, args, { dataSources }) => {
return dataSources.postAPI.getPostsByAuthor(parent.id);
}
},
Post: {
author: async (parent, args, { dataSources }) => {
return dataSources.userAPI.getUserById(parent.authorId);
}
}
};
バージョン情報
- スキルバージョン: 1.0.0