diff --git a/app/schema/mutations/__init__.py b/app/schema/mutations/__init__.py index ca0a9ae..7cda91d 100644 --- a/app/schema/mutations/__init__.py +++ b/app/schema/mutations/__init__.py @@ -1,3 +1,4 @@ +from .close_todo import CloseTodo from .create_todo import CreateTodo from .delete_todo import DeleteTodo -from .update_todo import UpdateTodo \ No newline at end of file +from .update_todo import UpdateTodo diff --git a/app/schema/mutations/close_todo.py b/app/schema/mutations/close_todo.py new file mode 100644 index 0000000..0489dd9 --- /dev/null +++ b/app/schema/mutations/close_todo.py @@ -0,0 +1,15 @@ +import graphene + +from app.schema.types.todo import TodoType +from app.usecases.close_todo import close_todo + + +class CloseTodo(graphene.Mutation): + class Arguments: + todo_id = graphene.String(required=True) + + todo = graphene.Field(TodoType) + + def mutate(self, info, todo_id: str): + todo = close_todo(todo_id) + return CloseTodo(todo=todo) diff --git a/app/schema/mutations/mutations.py b/app/schema/mutations/mutations.py index c98e46b..3a92415 100644 --- a/app/schema/mutations/mutations.py +++ b/app/schema/mutations/mutations.py @@ -1,9 +1,10 @@ import graphene -from . import CreateTodo, DeleteTodo, UpdateTodo +from . import CreateTodo, DeleteTodo, UpdateTodo, CloseTodo class Mutations(graphene.ObjectType): create_todo = CreateTodo.Field() update_todo = UpdateTodo.Field() delete_todo = DeleteTodo.Field() + close_todo = CloseTodo.Field() diff --git a/app/usecases/close_todo.py b/app/usecases/close_todo.py new file mode 100644 index 0000000..7c99727 --- /dev/null +++ b/app/usecases/close_todo.py @@ -0,0 +1,11 @@ +from app.models.todo import Todo +from app.repositories.todos import get_todo_by_id, todo_exists + + +def close_todo(todo_id: str) -> Todo: + if not todo_exists(todo_id): + return None + + todo = get_todo_by_id(todo_id) + todo.is_done = True + return todo