document API and format code

This commit is contained in:
Ruidy 2020-11-08 12:46:41 +01:00
parent f3f0466e1e
commit cb1a547fa7
22 changed files with 85 additions and 43 deletions

View file

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

View file

@ -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"),
]

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -5,6 +5,8 @@ from app.usecases.user import create_user
class CreateUser(graphene.Mutation):
"""Register an user"""
class Arguments:
username = graphene.String()

View file

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

View file

@ -6,6 +6,8 @@ from app.usecases.user import update_user
class UpdateUser(graphene.Mutation):
"""Update user information"""
class Arguments:
user = UserInputType()

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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