from typing import List, Optional from sqlalchemy.orm import Session from app.core.entities.step import StepEntity from app.infrastructure.database.models.steps import Step from app.infrastructure.database.repository.step_repository import StepRepository class StepService: def __init__(self, db: Session): self.repository = StepRepository(db) def get_all_steps(self) -> List[StepEntity]: steps = self.repository.get_all() return [ StepEntity( s.id, s.start_deadline, s.finish_deadline, s.order_id, s.status_id ) for s in steps ] def get_step_by_id(self, step_id: int) -> Optional[StepEntity]: step = self.repository.get_by_id(step_id) if step: return StepEntity( step.id, step.start_deadline, step.finish_deadline, step.order_id, step.status_id ) return None def create_step(self, entity: StepEntity) -> StepEntity: step_model = Step( start_deadline=entity.start_deadline, finish_deadline=entity.finish_deadline, order_id=entity.order_id, status_id=entity.status_id ) created_step = self.repository.create(step_model) return StepEntity( created_step.id, created_step.start_deadline, created_step.finish_deadline, created_step.order_id, created_step.status_id ) def update_step(self, step_id: int, entity: StepEntity) -> Optional[StepEntity]: step_model = self.repository.get_by_id(step_id) if step_model: step_model.start_deadline = entity.start_deadline step_model.finish_deadline = entity.finish_deadline step_model.order_id = entity.order_id step_model.status_id = entity.status_id self.repository.update(step_model) return StepEntity( step_model.id, step_model.start_deadline, step_model.finish_deadline, step_model.order_id, step_model.status_id ) return None def delete_step(self, step_id: int) -> bool: return self.repository.delete(step_id) is not None