144 lines
5.2 KiB
Python
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
|