diff --git a/app/models/todo.py b/app/models/todo.py index 9d45143..b8d2604 100644 --- a/app/models/todo.py +++ b/app/models/todo.py @@ -2,10 +2,7 @@ from uuid import uuid4 class Todo: - def __init__(self, - todo_id: str = None, - title: str = '', - is_done: bool = False): + def __init__(self, title: str, todo_id: str = None, is_done: bool = False): self.todo_id = todo_id or str(uuid4()) self.title = title self.is_done = is_done diff --git a/app/repositories/todos.py b/app/repositories/todos.py index 39c9a7d..fd7acf7 100644 --- a/app/repositories/todos.py +++ b/app/repositories/todos.py @@ -3,8 +3,8 @@ from typing import List from app.models.todo import Todo todo_list: List[Todo] = [ - Todo(title='First'), - Todo(todo_id="ec73296f-e108-46a3-bfb3-b4237cb072ba", title='Second') + Todo(title="First"), + Todo(todo_id="ec73296f-e108-46a3-bfb3-b4237cb072ba", title="Second"), ] diff --git a/app/schema/mutations/mutation.py b/app/schema/mutations/mutation.py index d2c4e40..83490f6 100644 --- a/app/schema/mutations/mutation.py +++ b/app/schema/mutations/mutation.py @@ -1,12 +1,12 @@ import graphene -from app.schema.mutations.todo import CreateTodo, DeleteTodo, CloseTodo, UpdateTodo +from app.schema.mutations.todo import CloseTodo, CreateTodo, DeleteTodo, UpdateTodo from app.schema.mutations.user import ( - CreateUser, - UpdateUser, - DeleteUser, AssignTodoToUser, + CreateUser, DeassignTodoToUser, + DeleteUser, + UpdateUser, ) diff --git a/app/schema/mutations/todo/close_todo.py b/app/schema/mutations/todo/close_todo.py index 2eb4a25..1c71d21 100644 --- a/app/schema/mutations/todo/close_todo.py +++ b/app/schema/mutations/todo/close_todo.py @@ -5,6 +5,8 @@ from app.usecases.todo import close_todo class CloseTodo(graphene.Mutation): + """Close an existing task""" + class Arguments: todo_id = graphene.String(required=True) diff --git a/app/schema/mutations/todo/create_todo.py b/app/schema/mutations/todo/create_todo.py index a0875c8..9dce25e 100644 --- a/app/schema/mutations/todo/create_todo.py +++ b/app/schema/mutations/todo/create_todo.py @@ -5,8 +5,10 @@ from app.usecases.todo import create_todo class CreateTodo(graphene.Mutation): + """Create a new task.""" + class Arguments: - title = graphene.String(default_value="") + title = graphene.String(required=True) result = graphene.Field(TodoResponseField) diff --git a/app/schema/mutations/todo/delete_todo.py b/app/schema/mutations/todo/delete_todo.py index 6daeeee..106b049 100644 --- a/app/schema/mutations/todo/delete_todo.py +++ b/app/schema/mutations/todo/delete_todo.py @@ -5,6 +5,8 @@ from app.usecases.todo import delete_todo class DeleteTodo(graphene.Mutation): + """Delete an existing task""" + class Arguments: todo_id = graphene.String(required=True) diff --git a/app/schema/mutations/todo/update_todo.py b/app/schema/mutations/todo/update_todo.py index dc47494..5e1c44b 100644 --- a/app/schema/mutations/todo/update_todo.py +++ b/app/schema/mutations/todo/update_todo.py @@ -6,11 +6,13 @@ from app.usecases.todo import update_todo class UpdateTodo(graphene.Mutation): + """Update an existing task""" + class Arguments: todo = TodoInputType() result = graphene.Field(TodoResponseField) def mutate(self, info, todo: Todo): - res = update_todo(todo.todo_id, todo.__dict__) + res = update_todo(todo.todo_id, vars(todo)) return UpdateTodo(TodoResponseField(todo=res)) diff --git a/app/schema/mutations/user/__init__.py b/app/schema/mutations/user/__init__.py index 8156a0b..32f0363 100644 --- a/app/schema/mutations/user/__init__.py +++ b/app/schema/mutations/user/__init__.py @@ -1,4 +1,4 @@ +from .assign_todo_to_user import AssignTodoToUser, DeassignTodoToUser from .create_user import CreateUser from .delete_user import DeleteUser from .update_user import UpdateUser -from .assign_todo_to_user import AssignTodoToUser, DeassignTodoToUser diff --git a/app/schema/mutations/user/assign_todo_to_user.py b/app/schema/mutations/user/assign_todo_to_user.py index aed00a0..4844ec8 100644 --- a/app/schema/mutations/user/assign_todo_to_user.py +++ b/app/schema/mutations/user/assign_todo_to_user.py @@ -5,6 +5,8 @@ from app.usecases.user import assign_todo_to_user, deassign_todo_to_user class AssignTodoToUser(graphene.Mutation): + """Assign an existing task to an existing user""" + class Arguments: todo_id = graphene.String() user_id = graphene.String() @@ -21,6 +23,8 @@ class AssignTodoToUser(graphene.Mutation): class DeassignTodoToUser(graphene.Mutation): + """Deassign an existing task from an existing user""" + class Arguments: todo_id = graphene.String() user_id = graphene.String() diff --git a/app/schema/mutations/user/create_user.py b/app/schema/mutations/user/create_user.py index 0b27f90..cc08559 100644 --- a/app/schema/mutations/user/create_user.py +++ b/app/schema/mutations/user/create_user.py @@ -5,6 +5,8 @@ from app.usecases.user import create_user class CreateUser(graphene.Mutation): + """Register an user""" + class Arguments: username = graphene.String() diff --git a/app/schema/mutations/user/delete_user.py b/app/schema/mutations/user/delete_user.py index 19660ce..2ff4940 100644 --- a/app/schema/mutations/user/delete_user.py +++ b/app/schema/mutations/user/delete_user.py @@ -5,6 +5,8 @@ from app.usecases.user import delete_user class DeleteUser(graphene.Mutation): + """Unregister an existing user""" + class Arguments: user_id = graphene.String(required=True) diff --git a/app/schema/mutations/user/update_user.py b/app/schema/mutations/user/update_user.py index 876713c..10359aa 100644 --- a/app/schema/mutations/user/update_user.py +++ b/app/schema/mutations/user/update_user.py @@ -6,6 +6,8 @@ from app.usecases.user import update_user class UpdateUser(graphene.Mutation): + """Update user information""" + class Arguments: user = UserInputType() diff --git a/app/schema/queries/queries.py b/app/schema/queries/queries.py index c5c759b..039edd0 100644 --- a/app/schema/queries/queries.py +++ b/app/schema/queries/queries.py @@ -1,28 +1,37 @@ import graphene -from .todo import resolve_get_todo, resolve_list_todos -from .user import resolve_list_users, resolve_get_user -from ..types.todo import TodoListResponseField, TodoResponseField -from ..types.user import UserListResponseField, UserResponseField +from app.schema.queries.todo import resolve_get_todo, resolve_list_todos +from app.schema.queries.user import resolve_get_user, resolve_list_users +from app.schema.types.todo import TodoListResponseField, TodoResponseField +from app.schema.types.user import UserListResponseField, UserResponseField class Query(graphene.ObjectType): - """Schema Queries""" - """Task Queries""" - list_todos = graphene.Field(TodoListResponseField, resolver=resolve_list_todos) + # Task Queries + list_todos = graphene.Field( + TodoListResponseField, + resolver=resolve_list_todos, + description="List existing tasks", + ) get_todo = graphene.Field( TodoResponseField, todo_id=graphene.String(required=True), resolver=resolve_get_todo, + description="Retrieve an existing tasks", ) - """User Queries""" - list_users = graphene.Field(UserListResponseField, resolver=resolve_list_users) + # User Queries + list_users = graphene.Field( + UserListResponseField, + resolver=resolve_list_users, + description="List registered users", + ) get_user = graphene.Field( UserResponseField, user_id=graphene.String(required=True), resolver=resolve_get_user, + description="Retrieve a registered user", ) diff --git a/app/schema/queries/todo.py b/app/schema/queries/todo.py index d2d9efa..51ec05c 100644 --- a/app/schema/queries/todo.py +++ b/app/schema/queries/todo.py @@ -2,7 +2,7 @@ Defines the query and how to interact with """ -from app.schema.types.todo import TodoResponseField, TodoListResponseField +from app.schema.types.todo import TodoListResponseField, TodoResponseField from app.usecases.todo import read_all_todos, read_todo_by_id diff --git a/app/schema/types/response.py b/app/schema/types/response.py index eab61b3..d467afd 100644 --- a/app/schema/types/response.py +++ b/app/schema/types/response.py @@ -1,6 +1,8 @@ import graphene -class ResponseField(graphene.ObjectType): +class ResponseField(graphene.Interface): + """Response interface""" + is_success = graphene.Boolean(default_value=True) error_message = graphene.String() diff --git a/app/schema/types/todo.py b/app/schema/types/todo.py index 46091a9..e3d5cc8 100644 --- a/app/schema/types/todo.py +++ b/app/schema/types/todo.py @@ -4,9 +4,7 @@ from app.schema.types.response import ResponseField class TodoType(graphene.ObjectType): - """ - Query Object Type - """ + """Todo Object Type""" todo_id = graphene.String() title = graphene.String(default_value="") @@ -14,22 +12,26 @@ class TodoType(graphene.ObjectType): class TodoInputType(graphene.InputObjectType): - """ - Mutation Input Object Type - """ + """Todo Input Object""" todo_id = graphene.String() title = graphene.String(default_value="") is_done = graphene.Boolean(default_value=False) -class TodoResponseField(ResponseField): +class TodoResponseField(graphene.ObjectType): + """Todo response object""" + + class Meta: + interfaces = (ResponseField,) + todo = graphene.Field(TodoType) -class TodoListResponseField(ResponseField): +class TodoListResponseField(graphene.ObjectType): + """Todos list response object""" + + class Meta: + interfaces = (ResponseField,) + todos = graphene.Field(graphene.List(TodoType)) - - -class CreateTodoResponseField(ResponseField): - todo = graphene.Field(TodoType) diff --git a/app/schema/types/user.py b/app/schema/types/user.py index fded72b..75c446a 100644 --- a/app/schema/types/user.py +++ b/app/schema/types/user.py @@ -5,19 +5,33 @@ from app.schema.types.todo import TodoType class UserType(graphene.ObjectType): + """User schema type""" + user_id = graphene.String() username = graphene.String() tasks = graphene.List(TodoType) class UserInputType(graphene.InputObjectType): + """User input object""" + user_id = graphene.String() username = graphene.String() -class UserListResponseField(ResponseField): +class UserListResponseField(graphene.ObjectType): + """User list response object""" + + class Meta: + interfaces = (ResponseField,) + users = graphene.List(UserType) -class UserResponseField(ResponseField): +class UserResponseField(graphene.ObjectType): + """User response object""" + + class Meta: + interfaces = (ResponseField,) + user = graphene.Field(UserType) diff --git a/app/usecases/todo/create_todo.py b/app/usecases/todo/create_todo.py index 7ee4c71..751ea50 100644 --- a/app/usecases/todo/create_todo.py +++ b/app/usecases/todo/create_todo.py @@ -2,5 +2,5 @@ from app.models.todo import Todo from app.repositories.todos import add_todo -def create_todo(title: str = '') -> Todo: +def create_todo(title: str) -> Todo: return add_todo(title) diff --git a/app/usecases/todo/delete_todo.py b/app/usecases/todo/delete_todo.py index 54c8dd7..48ef388 100644 --- a/app/usecases/todo/delete_todo.py +++ b/app/usecases/todo/delete_todo.py @@ -1,5 +1,5 @@ from app.models.todo import Todo -from app.repositories.todos import todo_exists, remove_todo +from app.repositories.todos import remove_todo, todo_exists def delete_todo(todo_id: str) -> Todo: diff --git a/app/usecases/user/assign_todo_to_user.py b/app/usecases/user/assign_todo_to_user.py index 70229fa..c94d2bd 100644 --- a/app/usecases/user/assign_todo_to_user.py +++ b/app/usecases/user/assign_todo_to_user.py @@ -1,4 +1,4 @@ -from app.models import User, Todo +from app.models import Todo, User from app.repositories.users import add_todo_to_user, remove_todo_from_user from app.usecases.todo import read_todo_by_id from app.usecases.user.read_user_by_id import read_user_by_id diff --git a/app/usecases/user/delete_user.py b/app/usecases/user/delete_user.py index df87c79..8b9bde1 100644 --- a/app/usecases/user/delete_user.py +++ b/app/usecases/user/delete_user.py @@ -1,7 +1,7 @@ from typing import Tuple from app.models.user import User -from app.repositories.users import user_exists, remove_user +from app.repositories.users import remove_user, user_exists def delete_user(user_id: str) -> Tuple[User, bool]: diff --git a/app/usecases/user/update_user.py b/app/usecases/user/update_user.py index 242ff7c..e67b294 100644 --- a/app/usecases/user/update_user.py +++ b/app/usecases/user/update_user.py @@ -1,7 +1,7 @@ from typing import Tuple from app.models.user import User -from app.repositories.users import user_exists, edit_user +from app.repositories.users import edit_user, user_exists def update_user(user_id: str, data: dict) -> Tuple[User, bool]: