TorbatYar/backend/services/delivery/app/policies/dispatch.py
Mortezakoohjani 72077908f1 feat(delivery): deploy backend phases 10.2-10.8 through settlement
Ship fleet, availability, pricing, dispatch, routing, tracking, and settlement on delivery-service 0.10.8.0 with migrations and phase tests green.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 21:01:23 +03:30

29 lines
872 B
Python

"""Dispatch domain policies — Phase 10.5."""
from __future__ import annotations
from app.models.types import DispatchJobAction, DispatchJobStatus
from app.validators.dispatch import (
ensure_dispatch_job_transition,
target_status_for,
validate_dispatch_reason,
)
class DispatchJobPolicy:
REQUIRES_REASON = frozenset(
{DispatchJobAction.CANCEL, DispatchJobAction.FAIL}
)
def assert_transition(
self,
*,
action: DispatchJobAction,
current: DispatchJobStatus,
reason: str | None = None,
) -> tuple[DispatchJobStatus, str | None]:
ensure_dispatch_job_transition(action=action, current=current)
cleaned = validate_dispatch_reason(
reason, required=action in self.REQUIRES_REASON
)
return target_status_for(action), cleaned