diff --git a/app/repositories/users.py b/app/repositories/users.py index c0c71c5..0fa5998 100644 --- a/app/repositories/users.py +++ b/app/repositories/users.py @@ -19,13 +19,11 @@ def add_user(username: str) -> User: return user -def edit_user(user_id: str, data) -> User: +def edit_user(user_id: str, data: dict) -> 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 + if username := data.get("username"): + user.username = username return user diff --git a/app/schema/mutations/__init__.py b/app/schema/mutations/__init__.py index ad133b0..2ca81d4 100644 --- a/app/schema/mutations/__init__.py +++ b/app/schema/mutations/__init__.py @@ -3,3 +3,4 @@ from .create_todo import CreateTodo from .delete_todo import DeleteTodo from .update_todo import UpdateTodo from .create_user import CreateUser +from .update_user import UpdateUser diff --git a/app/schema/mutations/mutations.py b/app/schema/mutations/mutations.py index 8b93b4c..47880fe 100644 --- a/app/schema/mutations/mutations.py +++ b/app/schema/mutations/mutations.py @@ -1,6 +1,6 @@ import graphene -from . import CreateTodo, DeleteTodo, UpdateTodo, CloseTodo, CreateUser +from . import CreateTodo, DeleteTodo, UpdateTodo, CloseTodo, CreateUser, UpdateUser class Mutations(graphene.ObjectType): @@ -11,3 +11,4 @@ class Mutations(graphene.ObjectType): close_todo = CloseTodo.Field() # user create_user = CreateUser.Field() + update_user = UpdateUser.Field() diff --git a/app/schema/mutations/update_user.py b/app/schema/mutations/update_user.py new file mode 100644 index 0000000..837ed37 --- /dev/null +++ b/app/schema/mutations/update_user.py @@ -0,0 +1,21 @@ +import graphene + +from app.models.user import User +from app.schema.types.user import UserInputType, UserResponseField +from app.usecases.user.update_user import update_user + + +class UpdateUser(graphene.Mutation): + class Arguments: + user = UserInputType() + + result = graphene.Field(UserResponseField) + + def mutate(self, info, user: User): + res, is_success = update_user(user.user_id, vars(user)) + error_message = "This user does not exist." if not is_success else None + return UpdateUser( + UserResponseField( + user=res, is_success=is_success, error_message=error_message + ) + ) diff --git a/app/schema/types/user.py b/app/schema/types/user.py index 43c2e1b..736dd17 100644 --- a/app/schema/types/user.py +++ b/app/schema/types/user.py @@ -8,6 +8,11 @@ class UserType(graphene.ObjectType): username = graphene.String() +class UserInputType(graphene.InputObjectType): + user_id = graphene.String() + username = graphene.String() + + class UserListResponseField(ResponseField): users = graphene.List(UserType) diff --git a/app/usecases/user/update_user.py b/app/usecases/user/update_user.py new file mode 100644 index 0000000..242ff7c --- /dev/null +++ b/app/usecases/user/update_user.py @@ -0,0 +1,11 @@ +from typing import Tuple + +from app.models.user import User +from app.repositories.users import user_exists, edit_user + + +def update_user(user_id: str, data: dict) -> Tuple[User, bool]: + if not user_exists(user_id=user_id): + return None, False + + return edit_user(user_id, data), True