已成功为项目添加 17 个 GraphQL mutation 方法,遵循 DDD 聚合根模式:
createUser(name: String!, level: String): User!updateUser(id: Int!, name: String, level: String): UserdeleteUser(id: Int!): Boolean!
createTeam(name: String!): Team!updateTeam(id: Int!, name: String): TeamdeleteTeam(id: Int!): Boolean!createSprint(teamId: Int!, name: String!, status: String): Sprint!deleteSprint(id: Int!): Boolean!addTeamMember(teamId: Int!, userId: Int!): Boolean!removeTeamMember(teamId: Int!, userId: Int!): Boolean!
updateSprint(id: Int!, name: String, status: String): SprintcreateStory(sprintId: Int!, name: String!, ownerId: Int!): Story!deleteStory(id: Int!): Boolean!
updateStory(id: Int!, name: String, ownerId: Int): StorycreateTask(storyId: Int!, name: String!, ownerId: Int!, estimate: Int): Task!deleteTask(id: Int!): Boolean!
updateTask(id: Int!, name: String, ownerId: Int, estimate: Int): Task
uv run uvicorn src.main:app --reload打开浏览器访问:http://localhost:8000/graphql
mutation {
createUser(name: "Alice", level: "admin") {
id
name
level
}
}mutation {
createTeam(name: "Backend Team") {
id
name
}
}mutation {
createSprint(teamId: 1, name: "Sprint 1", status: "planning") {
id
name
status
team {
id
name
}
}
}mutation {
createStory(sprintId: 1, name: "User Login Feature", ownerId: 1) {
id
name
owner {
id
name
}
sprint {
id
name
}
}
}mutation {
createTask(storyId: 1, name: "Implement API", ownerId: 1, estimate: 8) {
id
name
estimate
owner {
name
}
story {
name
}
}
}mutation {
updateSprint(id: 1, name: "Sprint 1 - Updated", status: "active") {
id
name
status
}
}mutation {
updateStory(id: 1, name: "Updated Story Name") {
id
name
}
}mutation {
updateTask(id: 1, estimate: 16) {
id
name
estimate
}
}mutation {
addTeamMember(teamId: 1, userId: 2)
}mutation {
deleteTask(id: 1)
deleteStory(id: 1)
deleteSprint(id: 1)
deleteTeam(id: 1)
deleteUser(id: 1)
}访问 http://localhost:8000/schema 查看完整的 GraphQL Schema SDL
完整的 CRUD 生命周期测试:
mutation {
# 1. 创建用户
user: createUser(name: "Test User", level: "user") {
id
name
}
# 2. 创建团队
team: createTeam(name: "Test Team") {
id
name
}
# 3. 创建 Sprint
sprint: createSprint(teamId: 1, name: "Test Sprint") {
id
name
}
# 4. 创建 Story
story: createStory(sprintId: 1, name: "Test Story", ownerId: 1) {
id
name
}
# 5. 创建 Task
task: createTask(storyId: 1, name: "Test Task", ownerId: 1) {
id
name
}
}✅ 所有 mutation 操作应该成功执行 ✅ 创建操作返回创建的实体对象 ✅ 更新操作返回更新后的实体对象(或 null 如果实体不存在) ✅ 删除操作返回 Boolean 表示是否成功 ✅ GraphQL Schema 应该包含所有 17 个 mutation ✅ 关联数据(如 owner, team 等)应该正确加载
src/services/user/mutation.pysrc/services/team/mutation.pysrc/services/sprint/mutation.pysrc/services/story/mutation.pysrc/services/task/mutation.py
src/services/user/schema.pysrc/services/team/schema.pysrc/services/sprint/schema.pysrc/services/story/schema.pysrc/services/task/schema.py
- DDD 聚合根模式:User 和 Team 作为聚合根,拥有完整的 CRUD 权限
- 父节点管理子节点:子实体的创建和删除由父节点负责
- 自身负责更新:所有实体都可以更新自己的属性
- 清晰的分层:mutation.py 负责数据库操作,schema.py 负责 GraphQL 接口
- 类型安全:完整的类型提示,自动生成 GraphQL Schema