skill-forge/API/app/infrastructure/users_service.py

144 lines
5.2 KiB
Python

from typing import Optional
from sqlalchemy.orm import Session
from app.application.users_repository import UsersRepository
from app.domain.entities.users_entity import UserEntity
from app.domain.models.users import User
class UsersService:
def __init__(self, db: Session):
self.users_repository = UsersRepository(db)
def get_all(self) -> list[UserEntity]:
users = self.users_repository.get_all()
return [
UserEntity(
id=user.id,
first_name=user.first_name,
last_name=user.last_name,
patronymic=user.patronymic,
gender=user.gender,
birthday=user.birthday,
registration_date=user.registration_date,
login=user.login,
email=user.email,
role_id=user.role_id,
) for user in users
]
def get_by_id(self, user_id: int) -> Optional[UserEntity]:
user = self.users_repository.get_by_id(user_id)
if user:
return UserEntity(
id=user.id,
first_name=user.first_name,
last_name=user.last_name,
patronymic=user.patronymic,
gender=user.gender,
birthday=user.birthday,
registration_date=user.registration_date,
login=user.login,
email=user.email,
role_id=user.role_id,
)
return None
def get_by_login(self, login: str) -> Optional[UserEntity]:
user = self.users_repository.get_by_login(login)
if user:
return UserEntity(
id=user.id,
first_name=user.first_name,
last_name=user.last_name,
patronymic=user.patronymic,
gender=user.gender,
birthday=user.birthday,
registration_date=user.registration_date,
login=user.login,
email=user.email,
role_id=user.role_id,
)
return None
def create(self, user: UserEntity) -> UserEntity:
user_model = User(
first_name=user.first_name,
last_name=user.last_name,
patronymic=user.patronymic,
gender=user.gender,
birthday=user.birthday,
registration_date=user.registration_date,
login=user.login,
email=user.email,
role_id=user.role_id,
)
user_model.set_password(user.password)
created_user = self.users_repository.create(user_model)
return UserEntity(
id=created_user.id,
first_name=created_user.first_name,
last_name=created_user.last_name,
patronymic=created_user.patronymic,
gender=created_user.gender,
birthday=created_user.birthday,
registration_date=created_user.registration_date,
login=created_user.login,
email=created_user.email,
role_id=created_user.role_id,
)
def update(self, user: UserEntity) -> Optional[UserEntity]:
user_model = self.users_repository.get_by_id(user.id)
if user_model:
user_model.first_name = user.first_name
user_model.last_name = user.last_name
user_model.patronymic = user.patronymic
user_model.gender = user.gender
user_model.birthday = user.birthday
user_model.registration_date = user.registration_date
user_model.login = user.login
user_model.email = user.email
user_model.role_id = user.role_id
updated_user = self.users_repository.update(user_model)
return UserEntity(
id=updated_user.id,
first_name=updated_user.first_name,
last_name=updated_user.last_name,
patronymic=updated_user.patronymic,
gender=updated_user.gender,
birthday=updated_user.birthday,
registration_date=updated_user.registration_date,
login=updated_user.login,
email=updated_user.email,
role_id=updated_user.role_id,
)
return None
def update_password(self, user_id: int, old_password: str, new_password: str) -> Optional[UserEntity]:
user = self.users_repository.get_by_id(user_id)
if user and user.check_password(old_password):
user.set_password(new_password)
updated_user = self.users_repository.update(user)
return UserEntity(
id=updated_user.id,
first_name=updated_user.first_name,
last_name=updated_user.last_name,
patronymic=updated_user.patronymic,
gender=updated_user.gender,
birthday=updated_user.birthday,
registration_date=updated_user.registration_date,
login=updated_user.login,
email=updated_user.email,
role_id=updated_user.role_id,
)
return None
def delete(self, user_id: int) -> bool:
return self.users_repository.delete(user_id) is not None