50 lines
1.7 KiB
Python
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) |