Register all active platform services and base features in core DB so admin can manage them, add delivery/hospitality/sports-center backend phases, update apps catalog and production deploy tooling. Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
"""Driver domain policies — Phase 10.1."""
|
|
from __future__ import annotations
|
|
|
|
from app.models.types import DriverLifecycleAction, DriverStatus
|
|
from app.validators.drivers import (
|
|
ensure_driver_lifecycle_transition,
|
|
target_status_for,
|
|
validate_reason,
|
|
)
|
|
|
|
|
|
class DriverLifecyclePolicy:
|
|
"""Enforces legal driver status transitions and reason rules."""
|
|
|
|
REQUIRES_REASON = frozenset(
|
|
{
|
|
DriverLifecycleAction.SUSPEND,
|
|
DriverLifecycleAction.BLOCK,
|
|
DriverLifecycleAction.DEACTIVATE,
|
|
DriverLifecycleAction.ARCHIVE,
|
|
}
|
|
)
|
|
|
|
def assert_transition(
|
|
self,
|
|
*,
|
|
action: DriverLifecycleAction,
|
|
current: DriverStatus,
|
|
reason: str | None = None,
|
|
) -> tuple[DriverStatus, str | None]:
|
|
ensure_driver_lifecycle_transition(action=action, current=current)
|
|
cleaned = validate_reason(
|
|
reason, required=action in self.REQUIRES_REASON
|
|
)
|
|
return target_status_for(action), cleaned
|