from typing import List, Optional from sqlalchemy.orm import Session from app.core.entities.status import StatusEntity from app.infrastructure.database.models.statuses import Status from app.infrastructure.database.repository.status_repository import StatusesRepository class StatusesService: def __init__(self, db: Session): self.repository = StatusesRepository(db) def get_all_statuses(self) -> List[StatusEntity]: statuses = self.repository.get_all() return [ StatusEntity( id=status.id, name=status.name, orders=[order.id for order in status.orders] if status.orders else [], steps=[step.id for step in status.steps] if status.steps else [] ) for status in statuses ] def get_status_by_id(self, status_id: int) -> Optional[StatusEntity]: status = self.repository.get_by_id(status_id) if status: return StatusEntity( id=status.id, name=status.name, orders=[order.id for order in status.orders] if status.orders else [], steps=[step.id for step in status.steps] if status.steps else [] ) return None def create_status(self, entity: StatusEntity) -> StatusEntity: status_model = Status( name=entity.name ) created_status = self.repository.create(status_model) return StatusEntity( id=created_status.id, name=created_status.name, orders=[], steps=[] ) def update_status(self, status_id: int, entity: StatusEntity) -> Optional[StatusEntity]: status_model = self.repository.get_by_id(status_id) if status_model: status_model.name = entity.name self.repository.update(status_model) return StatusEntity( id=status_model.id, name=status_model.name, orders=[order.id for order in status_model.orders] if status_model.orders else [], steps=[step.id for step in status_model.steps] if status_model.steps else [] ) return None def delete_status(self, status_id: int) -> bool: return self.repository.delete(status_id) is not None