一键导入
graphql-schema-generator
Generates GraphQL schemas with type definitions, resolvers, queries, mutations, and subscriptions. Use when building GraphQL APIs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Generates GraphQL schemas with type definitions, resolvers, queries, mutations, and subscriptions. Use when building GraphQL APIs.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | graphql-schema-generator |
| description | Generates GraphQL schemas with type definitions, resolvers, queries, mutations, and subscriptions. Use when building GraphQL APIs. |
Expert at creating GraphQL schemas with proper types, resolvers, and best practices.
// schema/user.schema.ts
import { gql } from 'apollo-server-express';
export const userTypeDefs = gql`
type User {
id: ID!
email: String!
name: String!
role: UserRole!
posts: [Post!]!
createdAt: DateTime!
updatedAt: DateTime!
}
enum UserRole {
USER
ADMIN
MODERATOR
}
input CreateUserInput {
email: String!
name: String!
password: String!
role: UserRole = USER
}
input UpdateUserInput {
email: String
name: String
password: String
role: UserRole
}
type UserConnection {
edges: [UserEdge!]!
pageInfo: PageInfo!
totalCount: Int!
}
type UserEdge {
node: User!
cursor: String!
}
type Query {
user(id: ID!): User
users(
first: Int = 10
after: String
search: String
): UserConnection!
me: User
}
type Mutation {
createUser(input: CreateUserInput!): User!
updateUser(id: ID!, input: UpdateUserInput!): User!
deleteUser(id: ID!): Boolean!
}
type Subscription {
userCreated: User!
userUpdated(id: ID!): User!
}
`;
// resolvers/user.resolvers.ts
import { UserInputError, AuthenticationError } from 'apollo-server-express';
import { UserService } from '../services/user.service';
import { pubsub } from '../pubsub';
const USER_CREATED = 'USER_CREATED';
const USER_UPDATED = 'USER_UPDATED';
export const userResolvers = {
Query: {
user: async (_parent, { id }, { services, user }) => {
if (!user) {
throw new AuthenticationError('Not authenticated');
}
return await services.user.findById(id);
},
users: async (_parent, { first, after, search }, { services, user }) => {
if (!user) {
throw new AuthenticationError('Not authenticated');
}
const result = await services.user.findAll({
first,
after,
search,
});
return {
edges: result.users.map(user => ({
node: user,
cursor: Buffer.from(user.id.toString()).toString('base64'),
})),
pageInfo: {
hasNextPage: result.hasNextPage,
endCursor: result.endCursor,
},
totalCount: result.totalCount,
};
},
me: async (_parent, _args, { user }) => {
if (!user) {
throw new AuthenticationError('Not authenticated');
}
return user;
},
},
Mutation: {
createUser: async (_parent, { input }, { services }) => {
const user = await services.user.create(input);
// Publish subscription event
pubsub.publish(USER_CREATED, { userCreated: user });
return user;
},
updateUser: async (_parent, { id, input }, { services, user }) => {
if (!user) {
throw new AuthenticationError('Not authenticated');
}
if (user.id !== id && user.role !== 'ADMIN') {
throw new AuthenticationError('Not authorized');
}
const updatedUser = await services.user.update(id, input);
if (!updatedUser) {
throw new UserInputError('User not found');
}
// Publish subscription event
pubsub.publish(USER_UPDATED, {
userUpdated: updatedUser,
id,
});
return updatedUser;
},
deleteUser: async (_parent, { id }, { services, user }) => {
if (!user || user.role !== 'ADMIN') {
throw new AuthenticationError('Admin access required');
}
const success = await services.user.delete(id);
if (!success) {
throw new UserInputError('User not found');
}
return true;
},
},
Subscription: {
userCreated: {
subscribe: () => pubsub.asyncIterator([USER_CREATED]),
},
userUpdated: {
subscribe: withFilter(
() => pubsub.asyncIterator([USER_UPDATED]),
(payload, variables) => {
return payload.id === variables.id;
}
),
},
},
User: {
// Field resolver for nested data
posts: async (parent, _args, { services }) => {
return await services.post.findByAuthorId(parent.id);
},
},
};
// dataloaders/user.dataloader.ts
import DataLoader from 'dataloader';
import { UserService } from '../services/user.service';
export function createUserLoader(userService: UserService) {
return new DataLoader(async (ids: readonly string[]) => {
const users = await userService.findByIds([...ids]);
const userMap = new Map(users.map(user => [user.id, user]));
return ids.map(id => userMap.get(id) || null);
});
}
// Use in context
export const createContext = ({ req }) => {
const userService = new UserService();
return {
user: req.user,
services: {
user: userService,
},
loaders: {
user: createUserLoader(userService),
},
};
};
Helps create, analyze, and maintain Architecture Decision Records
Generates comprehensive API documentation including OpenAPI/Swagger specs, endpoint descriptions, request/response examples, and integration guides. Use when documenting APIs.
Generate complete elizaOS character configurations with personality, knowledge, and plugin setup. Triggers when user asks to "create character", "generate agent config", or "build elizaOS character"
Execute the proper Drizzle Kit workflow for database schema migrations in asset-forge. Use this when the user asks to create a database migration, update the database schema, or when schema changes need to be applied to the database.
Integrates Lighthouse CI for automated performance testing, Core Web Vitals tracking, and regression detection in CI/CD pipelines. Use when user asks to "setup Lighthouse CI", "add performance testing", "monitor Core Web Vitals", or "prevent performance regressions".
Sets up visual regression testing using Percy, Chromatic, or Playwright to catch unintended UI changes through screenshot comparison. Use when user asks to "setup visual testing", "add screenshot tests", "prevent visual bugs", or "setup Percy/Chromatic".