API_logistics/app/core/usecases/user_service.py
2024-10-04 10:22:32 +05:00

95 lines
2.8 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 UserRepository
class UserService:
def __init__(self, db: Session):
self.repository = UserRepository(db)
def get_all_users(self) -> List[UserEntity]:
users = self.repository.get_all()
return [
UserEntity(
user.id,
user.first_name,
user.last_name,
user.login,
user.password,
user.role_id
) 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(
user.id,
user.first_name,
user.last_name,
user.login,
user.password,
user.role_id
)
return None
def get_user_by_login(self, login: str) -> Optional[UserEntity]:
user = self.repository.get_by_login(login)
if user:
return UserEntity(
user.id,
user.first_name,
user.last_name,
user.login,
user.password,
user.role_id
)
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(
created_user.id,
created_user.first_name,
created_user.last_name,
created_user.login,
created_user.password,
created_user.role_id
)
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(
user_model.id,
user_model.first_name,
user_model.last_name,
user_model.login,
user_model.password,
user_model.role_id
)
return None
def delete_user(self, user_id: int) -> bool:
return self.repository.delete(user_id) is not None