65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
from src.database.users.crud import UsersCrudActions
|
|
from src.errors.http_errors.errors import Errors
|
|
from src.models.pydantic_models.model import UserCreate, UserOut, UserUpdate
|
|
from src.service.auth.jwt import HashService
|
|
|
|
|
|
class CrudService:
|
|
|
|
def __init__(self) -> None:
|
|
self.errors=Errors()
|
|
self.crud_db_actions=UsersCrudActions()
|
|
self.hash_service=HashService()
|
|
|
|
|
|
async def get_user_by_email(self, email:str)->UserOut:
|
|
|
|
user_entity=await self.crud_db_actions.get_user_by_email(email)
|
|
|
|
if not user_entity:
|
|
raise self.errors.not_found_error(detail="User wasn't found")
|
|
return UserOut.model_validate(user_entity)
|
|
|
|
|
|
async def create_user(self, data:UserCreate)->UserOut:
|
|
|
|
user_data=UserCreate.model_dump(data)
|
|
|
|
user_data["hashed_password"]=user_data.pop("plain_password")
|
|
user_data["hashed_password"]=self.hash_service.plain_to_hash(user_data["hashed_password"])
|
|
|
|
user_entity=await self.crud_db_actions.create_user(user_data)
|
|
|
|
if not user_entity:
|
|
raise self.errors.validation_error(detail="User creation gone wrong")
|
|
return UserOut.model_validate(user_entity)
|
|
|
|
|
|
async def delete_user(self, email:str)->bool:
|
|
|
|
user_entity=await self.crud_db_actions.delete_user(email)
|
|
|
|
if not user_entity:
|
|
raise self.errors.not_found_error(detail="User not found")
|
|
return user_entity
|
|
|
|
|
|
async def update_user(self, email:str, data:UserUpdate)->UserOut:
|
|
|
|
user_data=UserUpdate.model_dump(data, exclude_unset=True)
|
|
|
|
if not user_data:
|
|
raise self.errors.bad_request_error(detail="User info to update can not be empty")
|
|
|
|
if user_data.get("plain_password"):
|
|
user_data["hashed_password"]=user_data.pop("plain_password")
|
|
user_data["hashed_password"]=self.hash_service.plain_to_hash(user_data["hashed_password"])
|
|
|
|
user_entity=await self.crud_db_actions.update_user(email, user_data)
|
|
|
|
if not user_entity:
|
|
raise self.errors.not_found_error(detail="User not found")
|
|
return UserOut.model_validate(user_entity)
|
|
|
|
async def crud_service()->CrudService:
|
|
return CrudService() |