82 lines
3.0 KiB
Python
82 lines
3.0 KiB
Python
from typing import List, Optional
|
|
from sqlalchemy.orm import Session
|
|
from app.core.entities.user import UserEntity
|
|
from app.infrastructure.database.models.users import User
|
|
from app.infrastructure.database.repository.user_repository import UsersRepository
|
|
|
|
|
|
class UsersService:
|
|
def __init__(self, db: Session):
|
|
self.repository = UsersRepository(db)
|
|
|
|
def get_all_users(self) -> List[UserEntity]:
|
|
users = self.repository.get_all()
|
|
return [
|
|
UserEntity(
|
|
id=user.id,
|
|
first_name=user.first_name,
|
|
last_name=user.last_name,
|
|
login=user.login,
|
|
password=user.password,
|
|
role_id=user.role_id,
|
|
total_orders=[to.id for to in user.total_orders] if user.total_orders else []
|
|
)
|
|
for user in users
|
|
]
|
|
|
|
def get_user_by_id(self, user_id: int) -> Optional[UserEntity]:
|
|
user = self.repository.get_by_id(user_id)
|
|
if user:
|
|
return UserEntity(
|
|
id=user.id,
|
|
first_name=user.first_name,
|
|
last_name=user.last_name,
|
|
login=user.login,
|
|
password=user.password,
|
|
role_id=user.role_id,
|
|
total_orders=[to.id for to in user.total_orders] if user.total_orders else []
|
|
)
|
|
return None
|
|
|
|
def create_user(self, entity: UserEntity) -> UserEntity:
|
|
user_model = User(
|
|
first_name=entity.first_name,
|
|
last_name=entity.last_name,
|
|
login=entity.login,
|
|
password=entity.password,
|
|
role_id=entity.role_id
|
|
)
|
|
created_user = self.repository.create(user_model)
|
|
return UserEntity(
|
|
id=created_user.id,
|
|
first_name=created_user.first_name,
|
|
last_name=created_user.last_name,
|
|
login=created_user.login,
|
|
password=created_user.password,
|
|
role_id=created_user.role_id,
|
|
total_orders=[]
|
|
)
|
|
|
|
def update_user(self, user_id: int, entity: UserEntity) -> Optional[UserEntity]:
|
|
user_model = self.repository.get_by_id(user_id)
|
|
if user_model:
|
|
user_model.first_name = entity.first_name
|
|
user_model.last_name = entity.last_name
|
|
user_model.login = entity.login
|
|
user_model.password = entity.password
|
|
user_model.role_id = entity.role_id
|
|
self.repository.update(user_model)
|
|
return UserEntity(
|
|
id=user_model.id,
|
|
first_name=user_model.first_name,
|
|
last_name=user_model.last_name,
|
|
login=user_model.login,
|
|
password=user_model.password,
|
|
role_id=user_model.role_id,
|
|
total_orders=[to.id for to in user_model.total_orders] if user_model.total_orders else []
|
|
)
|
|
return None
|
|
|
|
def delete_user(self, user_id: int) -> bool:
|
|
return self.repository.delete(user_id) is not None
|