create user module

This commit is contained in:
Ruidy 2020-10-30 16:07:06 +01:00
parent 50351e8b36
commit 33d63ceabf
21 changed files with 157 additions and 40 deletions

View file

@ -4,7 +4,7 @@ from starlette.graphql import GraphQLApp
from starlette.middleware.cors import CORSMiddleware
from app.schema.mutations.mutations import Mutations
from app.schema.queries.todo import TodoQuery
from app.schema.queries.queries import Query
origins = ["*"]
methods = ["*"]
@ -21,7 +21,7 @@ def create_app() -> FastAPI:
allow_headers=headers,
)
app.add_route(
"/", GraphQLApp(schema=graphene.Schema(query=TodoQuery, mutation=Mutations))
"/", GraphQLApp(schema=graphene.Schema(query=Query, mutation=Mutations))
)
return app

8
app/models/user.py Normal file
View file

@ -0,0 +1,8 @@
from uuid import uuid4
class User:
def __init__(self, user_id: str = None, username: str = "X"):
self.user_id = user_id or uuid4()
self.username = username
self.tasks = []

40
app/repositories/users.py Normal file
View file

@ -0,0 +1,40 @@
from typing import List
from app.models.user import User
user_list: List[User] = [User("id", "Jane Doe"), User(username="John Doe")]
def get_all_users() -> List[User]:
return user_list
def get_user_by_id(user_id: str) -> User:
return [user for user in user_list if user.user_id == user_id][0]
def add_user(username: str) -> User:
user = User(username=username)
user_list.append(user)
return user
def edit_user(user_id: str, data) -> User:
user = get_user_by_id(user_id)
if title := data.get("title"):
user.title = title
if is_done := data.get("is_done"):
user.is_done = is_done
return user
def user_exists(user_id: str) -> bool:
return any([user.user_id == user_id for user in user_list])
def remove_user(user_id: str) -> User:
user = get_user_by_id(user_id)
index = user_list.index(user)
return user_list.pop(index)

View file

@ -1,7 +1,7 @@
import graphene
from app.schema.types.todo import TodoType
from app.usecases.close_todo import close_todo
from app.usecases.todo.close_todo import close_todo
class CloseTodo(graphene.Mutation):

View file

@ -0,0 +1,28 @@
import graphene
from app.schema.types.todo import TodoListResponseField, TodoResponseField
from .todo import resolve_get_todo, resolve_list_todos
from .user import resolve_list_users, resolve_get_user
from ..types.user import UserListResponseField, UserResponseField
class Query(graphene.ObjectType):
"""Schema Queries"""
"""Task Queries"""
list_todos = graphene.Field(TodoListResponseField, resolver=resolve_list_todos)
get_todo = graphene.Field(
TodoResponseField,
todo_id=graphene.String(required=True),
resolver=resolve_get_todo,
)
"""User Queries"""
list_users = graphene.Field(UserListResponseField, resolver=resolve_list_users)
get_user = graphene.Field(
UserResponseField,
user_id=graphene.String(required=True),
resolver=resolve_get_user,
)

View file

@ -1,36 +1,30 @@
import graphene
"""
Defines the query and how to interact with
"""
from app.schema.types.todo import TodoResponseField, TodoListResponseField
from app.usecases import read_all_todos, read_todo_by_id
class TodoQuery(graphene.ObjectType):
"""
Defines the query and how to interact with
"""
def resolve_list_todos(self, info) -> TodoListResponseField:
try:
todos = read_all_todos()
is_success = True
error_message = None
except Exception as e:
error_message = str(e)
is_success = False
todos = None
list_todos = graphene.Field(TodoListResponseField)
return TodoListResponseField(
todos=todos, is_success=is_success, error_message=error_message
)
def resolve_list_todos(self, info) -> TodoListResponseField:
try:
todos = read_all_todos()
is_success = True
error_message = None
except Exception as e:
error_message = str(e)
is_success = False
todos = None
return TodoListResponseField(
todos=todos, is_success=is_success, error_message=error_message
)
def resolve_get_todo(self, info, todo_id: str) -> TodoResponseField:
todo, is_success = read_todo_by_id(todo_id)
error_message = "This element does not exist." if not is_success else None
get_todo = graphene.Field(TodoResponseField, todo_id=graphene.String(required=True))
def resolve_get_todo(self, info, todo_id: str) -> TodoResponseField:
todo, is_success = read_todo_by_id(todo_id)
error_message = "This element does not exist." if not is_success else None
return TodoResponseField(
todo=todo, is_success=is_success, error_message=error_message
)
return TodoResponseField(
todo=todo, is_success=is_success, error_message=error_message
)

View file

@ -0,0 +1,13 @@
from app.schema.types.user import UserListResponseField, UserResponseField
from app.usecases.user.read_all_users import read_all_users
from app.usecases.user.read_user_by_id import read_user_by_id
def resolve_list_users(self, info):
users = read_all_users()
return UserListResponseField(users=users)
def resolve_get_user(self, info, user_id: str):
user = read_user_by_id(user_id)
return UserResponseField(user=user)

View file

@ -0,0 +1,6 @@
import graphene
class ResponseField(graphene.ObjectType):
is_success = graphene.Boolean(default_value=True)
error_message = graphene.String()

View file

@ -1,5 +1,7 @@
import graphene
from app.schema.types.response import ResponseField
class TodoType(graphene.ObjectType):
"""
@ -21,11 +23,6 @@ class TodoInputType(graphene.InputObjectType):
is_done = graphene.Boolean(default_value=False)
class ResponseField(graphene.ObjectType):
is_success = graphene.Boolean(default_value=True)
error_message = graphene.String()
class TodoResponseField(ResponseField):
todo = graphene.Field(TodoType)

16
app/schema/types/user.py Normal file
View file

@ -0,0 +1,16 @@
import graphene
from app.schema.types.response import ResponseField
class UserType(graphene.ObjectType):
user_id = graphene.String()
username = graphene.String()
class UserListResponseField(ResponseField):
users = graphene.List(UserType)
class UserResponseField(ResponseField):
user = graphene.Field(UserType)

View file

@ -1,5 +1,6 @@
from .create_todo import create_todo
from .delete_todo import delete_todo
from .read_all_todos import read_all_todos
from .read_todo_by_id import read_todo_by_id
from .update_todo import update_todo
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

View file

View file

@ -0,0 +1,8 @@
from typing import List
from app.models.user import User
from app.repositories.users import get_all_users
def read_all_users() -> List[User]:
return get_all_users()

View file

@ -0,0 +1,6 @@
from app.models.user import User
from app.repositories.users import get_user_by_id
def read_user_by_id(user_id: str) -> User:
return get_user_by_id(user_id)