mirror of
https://github.com/rjNemo/graphql_python_template
synced 2026-06-06 02:26:47 +00:00
add assign todo to user mutation
This commit is contained in:
parent
ba881d254e
commit
6cfd322939
20 changed files with 85 additions and 22 deletions
|
|
@ -0,0 +1,2 @@
|
||||||
|
from .todo import Todo
|
||||||
|
from .user import User
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from app.models.user import User
|
from app.models import Todo, User
|
||||||
|
|
||||||
user_list: List[User] = [User("id", "Jane Doe"), User(username="John Doe")]
|
jane = User("id", "Jane Doe")
|
||||||
|
jane.tasks = [Todo(title="Test")]
|
||||||
|
user_list: List[User] = [jane, User(username="John Doe")]
|
||||||
|
|
||||||
|
|
||||||
def get_all_users() -> List[User]:
|
def get_all_users() -> List[User]:
|
||||||
|
|
@ -36,3 +38,8 @@ def remove_user(user_id: str) -> User:
|
||||||
user = get_user_by_id(user_id)
|
user = get_user_by_id(user_id)
|
||||||
index = user_list.index(user)
|
index = user_list.index(user)
|
||||||
return user_list.pop(index)
|
return user_list.pop(index)
|
||||||
|
|
||||||
|
|
||||||
|
def add_todo_to_user(todo: Todo, user: User) -> bool:
|
||||||
|
user.tasks.append(todo)
|
||||||
|
return True
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.mutations.todo import CreateTodo, DeleteTodo, CloseTodo, UpdateTodo
|
from app.schema.mutations.todo import CreateTodo, DeleteTodo, CloseTodo, UpdateTodo
|
||||||
from app.schema.mutations.user import CreateUser, UpdateUser, DeleteUser
|
from app.schema.mutations.user import (
|
||||||
|
CreateUser,
|
||||||
|
UpdateUser,
|
||||||
|
DeleteUser,
|
||||||
|
AssignTodoToUser,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Mutation(graphene.ObjectType):
|
class Mutation(graphene.ObjectType):
|
||||||
|
|
@ -14,3 +19,4 @@ class Mutation(graphene.ObjectType):
|
||||||
create_user = CreateUser.Field()
|
create_user = CreateUser.Field()
|
||||||
update_user = UpdateUser.Field()
|
update_user = UpdateUser.Field()
|
||||||
delete_user = DeleteUser.Field()
|
delete_user = DeleteUser.Field()
|
||||||
|
assign_todo_to_user = AssignTodoToUser.Field()
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.todo import TodoResponseField
|
from app.schema.types.todo import TodoResponseField
|
||||||
from app.usecases.todo.close_todo import close_todo
|
from app.usecases.todo import close_todo
|
||||||
|
|
||||||
|
|
||||||
class CloseTodo(graphene.Mutation):
|
class CloseTodo(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.todo import TodoResponseField
|
from app.schema.types.todo import TodoResponseField
|
||||||
from app.usecases import create_todo
|
from app.usecases.todo import create_todo
|
||||||
|
|
||||||
|
|
||||||
class CreateTodo(graphene.Mutation):
|
class CreateTodo(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.todo import TodoResponseField
|
from app.schema.types.todo import TodoResponseField
|
||||||
from app.usecases import delete_todo
|
from app.usecases.todo import delete_todo
|
||||||
|
|
||||||
|
|
||||||
class DeleteTodo(graphene.Mutation):
|
class DeleteTodo(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import graphene
|
||||||
|
|
||||||
from app.models.todo import Todo
|
from app.models.todo import Todo
|
||||||
from app.schema.types.todo import TodoInputType, TodoResponseField
|
from app.schema.types.todo import TodoInputType, TodoResponseField
|
||||||
from app.usecases import update_todo
|
from app.usecases.todo import update_todo
|
||||||
|
|
||||||
|
|
||||||
class UpdateTodo(graphene.Mutation):
|
class UpdateTodo(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
from .create_user import CreateUser
|
from .create_user import CreateUser
|
||||||
from .delete_user import DeleteUser
|
from .delete_user import DeleteUser
|
||||||
from .update_user import UpdateUser
|
from .update_user import UpdateUser
|
||||||
|
from .assign_todo_to_user import AssignTodoToUser
|
||||||
|
|
|
||||||
20
app/schema/mutations/user/assign_todo_to_user.py
Normal file
20
app/schema/mutations/user/assign_todo_to_user.py
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
import graphene
|
||||||
|
|
||||||
|
from app.schema.types.response import ResponseField
|
||||||
|
from app.usecases.user import assign_todo_to_user
|
||||||
|
|
||||||
|
|
||||||
|
class AssignTodoToUser(graphene.Mutation):
|
||||||
|
class Arguments:
|
||||||
|
todo_id = graphene.String()
|
||||||
|
user_id = graphene.String()
|
||||||
|
|
||||||
|
result = graphene.Field(ResponseField)
|
||||||
|
|
||||||
|
def mutate(self, info, todo_id: str, user_id: str):
|
||||||
|
is_success = assign_todo_to_user(user_id=user_id, todo_id=todo_id)
|
||||||
|
error_message = "Cannot assign todo to user." if not is_success else None
|
||||||
|
|
||||||
|
return AssignTodoToUser(
|
||||||
|
ResponseField(is_success=is_success, error_message=error_message)
|
||||||
|
)
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.user import UserResponseField
|
from app.schema.types.user import UserResponseField
|
||||||
from app.usecases.user.create_user import create_user
|
from app.usecases.user import create_user
|
||||||
|
|
||||||
|
|
||||||
class CreateUser(graphene.Mutation):
|
class CreateUser(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.user import UserResponseField
|
from app.schema.types.user import UserResponseField
|
||||||
from app.usecases.user.delete_user import delete_user
|
from app.usecases.user import delete_user
|
||||||
|
|
||||||
|
|
||||||
class DeleteUser(graphene.Mutation):
|
class DeleteUser(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import graphene
|
||||||
|
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.schema.types.user import UserInputType, UserResponseField
|
from app.schema.types.user import UserInputType, UserResponseField
|
||||||
from app.usecases.user.update_user import update_user
|
from app.usecases.user import update_user
|
||||||
|
|
||||||
|
|
||||||
class UpdateUser(graphene.Mutation):
|
class UpdateUser(graphene.Mutation):
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ Defines the query and how to interact with
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from app.schema.types.todo import TodoResponseField, TodoListResponseField
|
from app.schema.types.todo import TodoResponseField, TodoListResponseField
|
||||||
from app.usecases import read_all_todos, read_todo_by_id
|
from app.usecases.todo import read_all_todos, read_todo_by_id
|
||||||
|
|
||||||
|
|
||||||
def resolve_list_todos(self, info) -> TodoListResponseField:
|
def resolve_list_todos(self, info) -> TodoListResponseField:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
from app.schema.types.user import UserListResponseField, UserResponseField
|
from app.schema.types.user import UserListResponseField, UserResponseField
|
||||||
from app.usecases.user.read_all_users import read_all_users
|
from app.usecases.user import read_all_users, read_user_by_id
|
||||||
from app.usecases.user.read_user_by_id import read_user_by_id
|
|
||||||
|
|
||||||
|
|
||||||
def resolve_list_users(self, info):
|
def resolve_list_users(self, info):
|
||||||
|
|
@ -9,5 +8,5 @@ def resolve_list_users(self, info):
|
||||||
|
|
||||||
|
|
||||||
def resolve_get_user(self, info, user_id: str):
|
def resolve_get_user(self, info, user_id: str):
|
||||||
user = read_user_by_id(user_id)
|
user, _ = read_user_by_id(user_id)
|
||||||
return UserResponseField(user=user)
|
return UserResponseField(user=user)
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
|
||||||
from app.schema.types.response import ResponseField
|
from app.schema.types.response import ResponseField
|
||||||
|
from app.schema.types.todo import TodoType
|
||||||
|
|
||||||
|
|
||||||
class UserType(graphene.ObjectType):
|
class UserType(graphene.ObjectType):
|
||||||
user_id = graphene.String()
|
user_id = graphene.String()
|
||||||
username = graphene.String()
|
username = graphene.String()
|
||||||
|
tasks = graphene.List(TodoType)
|
||||||
|
|
||||||
|
|
||||||
class UserInputType(graphene.InputObjectType):
|
class UserInputType(graphene.InputObjectType):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
from app.usecases.todo.close_todo import close_todo
|
|
||||||
from app.usecases.todo.create_todo import create_todo
|
|
||||||
from app.usecases.todo.delete_todo import delete_todo
|
|
||||||
from app.usecases.todo.read_all_todos import read_all_todos
|
|
||||||
from app.usecases.todo.read_todo_by_id import read_todo_by_id
|
|
||||||
from app.usecases.todo.update_todo import update_todo
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
from app.usecases.todo.close_todo import close_todo
|
||||||
|
from app.usecases.todo.create_todo import create_todo
|
||||||
|
from app.usecases.todo.delete_todo import delete_todo
|
||||||
|
from app.usecases.todo.read_all_todos import read_all_todos
|
||||||
|
from app.usecases.todo.read_todo_by_id import read_todo_by_id
|
||||||
|
from app.usecases.todo.update_todo import update_todo
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
from .assign_todo_to_user import assign_todo_to_user
|
||||||
|
from .create_user import create_user
|
||||||
|
from .delete_user import delete_user
|
||||||
|
from .read_all_users import read_all_users
|
||||||
|
from .read_user_by_id import read_user_by_id
|
||||||
|
from .update_user import update_user
|
||||||
15
app/usecases/user/assign_todo_to_user.py
Normal file
15
app/usecases/user/assign_todo_to_user.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
from app.repositories.users import add_todo_to_user
|
||||||
|
from app.usecases.todo import read_todo_by_id
|
||||||
|
from app.usecases.user.read_user_by_id import read_user_by_id
|
||||||
|
|
||||||
|
|
||||||
|
def assign_todo_to_user(user_id: str, todo_id: str) -> bool:
|
||||||
|
user, is_success = read_user_by_id(user_id)
|
||||||
|
if not is_success:
|
||||||
|
return False
|
||||||
|
|
||||||
|
todo, is_success = read_todo_by_id(todo_id)
|
||||||
|
if not is_success:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return add_todo_to_user(todo, user)
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.repositories.users import get_user_by_id
|
from app.repositories.users import get_user_by_id
|
||||||
|
|
||||||
|
|
||||||
def read_user_by_id(user_id: str) -> User:
|
def read_user_by_id(user_id: str) -> Tuple[User, bool]:
|
||||||
return get_user_by_id(user_id)
|
try:
|
||||||
|
return get_user_by_id(user_id), True
|
||||||
|
except IndexError:
|
||||||
|
return None, False
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue