add assign todo to user mutation

This commit is contained in:
Ruidy 2020-11-07 23:34:37 +01:00
parent ba881d254e
commit 6cfd322939
20 changed files with 85 additions and 22 deletions

View file

@ -0,0 +1,2 @@
from .todo import Todo
from .user import User

View file

@ -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

View file

@ -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()

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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

View 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)
)

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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:

View file

@ -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)

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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

View 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)

View file

@ -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