75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
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(
|
|
id=s.id,
|
|
start_deadline=s.start_deadline,
|
|
finish_deadline=s.finish_deadline,
|
|
order_id=s.order_id,
|
|
status_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(
|
|
id=step.id,
|
|
start_deadline=step.start_deadline,
|
|
finish_deadline=step.finish_deadline,
|
|
order_id=step.order_id,
|
|
status_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(
|
|
id=created_step.id,
|
|
start_deadline=created_step.start_deadline,
|
|
finish_deadline=created_step.finish_deadline,
|
|
order_id=created_step.order_id,
|
|
status_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(
|
|
id=step_model.id,
|
|
start_deadline=step_model.start_deadline,
|
|
finish_deadline=step_model.finish_deadline,
|
|
order_id=step_model.order_id,
|
|
status_id=step_model.status_id,
|
|
)
|
|
|
|
return None
|
|
|
|
def delete_step(self, step_id: int) -> bool:
|
|
return self.repository.delete(step_id) is not None
|