diff --git a/app/controller/Users.py b/app/controller/Users.py index 92efe27..275a058 100644 --- a/app/controller/Users.py +++ b/app/controller/Users.py @@ -47,3 +47,10 @@ def handle_login(self, auth_code: str): "status": status.HTTP_200_OK, }) ) + + def handle_update_user(self, user_id: int, update_data: dict): + self.users_service.update_user(user_id, update_data) + return { + "message": "User updated successfully", + "status": status.HTTP_200_OK, + } diff --git a/app/main.py b/app/main.py index 723d266..763f6bb 100644 --- a/app/main.py +++ b/app/main.py @@ -2,7 +2,7 @@ from controller.Users import UsersController from service.Users import UsersService from repository.Users import UsersRepository -from schemas.Schemas import CreateUserSchema +from schemas.Schemas import CreateUserSchema, UpdateUserSchema from schemas.Schemas import LoginRequest @@ -35,3 +35,8 @@ async def create_user(user_data: CreateUserSchema): @app.post("/login") def login_with_google(request: LoginRequest): return users_controller.handle_login(request.auth_code) + + +@app.patch("/users/{user_id}") +async def update_user(user_id: int, update_data: UpdateUserSchema): + return users_controller.handle_update_user(user_id, update_data.dict()) diff --git a/app/repository/Users.py b/app/repository/Users.py index 9701b42..e633e95 100644 --- a/app/repository/Users.py +++ b/app/repository/Users.py @@ -63,6 +63,14 @@ def create_user( self.session.commit() return new_user + def edit_user(self, user_id: int, data_to_edit: dict): + user = self.session.query(User).filter_by(id=user_id).first() + for field, value in data_to_edit.items(): + setattr(user, field, value) + + self.session.commit() + return user + def __parse_result(self, result): if not result: return [] diff --git a/app/schemas/Schemas.py b/app/schemas/Schemas.py index 025c68a..0aa08d6 100644 --- a/app/schemas/Schemas.py +++ b/app/schemas/Schemas.py @@ -1,4 +1,5 @@ -from pydantic import BaseModel +from pydantic import BaseModel, HttpUrl +from typing import Optional class UserSchema(BaseModel): @@ -15,3 +16,9 @@ class CreateUserSchema(BaseModel): class LoginRequest(BaseModel): auth_code: str + + +class UpdateUserSchema(BaseModel): + name: Optional[str] = None + gender: Optional[str] = None + photo: Optional[HttpUrl] = None diff --git a/app/service/Users.py b/app/service/Users.py index 14d1efe..763237f 100644 --- a/app/service/Users.py +++ b/app/service/Users.py @@ -70,3 +70,10 @@ def _get_user_info(self, access_token): if response.json().get("picture") is not None: user_data['photo'] = response.json().get("picture") return user_data + + def update_user(self, user_id: int, update_data: dict): + # TODO: aca habria que chequear a partir del token, session o algo que + # es el propio usuario editando sus datos y no permitir + # que un usuario edite los de un tercero + self.get_user(user_id) + self.user_repository.edit_user(user_id, update_data)