2025-08-09 17:27:25 +08:00

50 lines
1.7 KiB
Python

import re
from uuid import UUID
from typing import List
from src.users.repository import repository
from src.users.exceptions import is_user_valid, is_password_same, is_email_exist_to_other_user
from src.users.schemas import UserUpdateModel, UserResponseModel
class UserService:
def __init__(self, repository: repository):
self.repository = repository
async def get_users(self) -> List[UserResponseModel]:
return self.repository.get_users()
async def get_user_details(self, user: str) -> UserResponseModel:
is_user_valid(user)
try:
UUID(user, version=4)
user_details = self.repository.get_user_details(user)
except ValueError:
if re.match(r"[^@]+@[^@]+\.[^@]+", user):
user_details = self.repository.get_user_details_by_email(user)
else:
user_details = self.repository.get_user_details_by_name(user)
return user_details
async def update_user(self, user_info: UserUpdateModel) -> dict[str, str]:
is_user_valid(user_info.id)
is_email_exist_to_other_user(user_info.id, user_info.email)
current_user_info = self.repository.get_user_details(user_info.id)
if user_info.firstname is None:
user_info.firstname = current_user_info["firstname"]
if user_info.lastname is None:
user_info.lastname = current_user_info["lastname"]
if user_info.email is None:
user_info.email = current_user_info["email"]
if user_info.password:
is_password_same(user_info.id,user_info.password)
else:
current_password = self.repository.get_user_password(user_info.id)
user_info.password = current_password["password"]
response = self.repository.save_user_info(user_info)
return {"message": response}
user_service = UserService(repository)