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>
93 lines
3.2 KiB
Python
93 lines
3.2 KiB
Python
"""Fleet command handlers — Phase 10.2."""
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.schemas.fleet import (
|
|
FleetCreate,
|
|
FleetUpdate,
|
|
VehicleAssignmentCreate,
|
|
VehicleAssignmentUpdate,
|
|
VehicleCreate,
|
|
VehicleTypeCreate,
|
|
VehicleTypeUpdate,
|
|
VehicleUpdate,
|
|
)
|
|
from app.services.fleet import FleetService, VehicleService, VehicleTypeService
|
|
from shared.security import CurrentUser
|
|
|
|
|
|
class FleetCommands:
|
|
def __init__(self, session: AsyncSession) -> None:
|
|
self.fleets = FleetService(session)
|
|
self.types = VehicleTypeService(session)
|
|
self.vehicles = VehicleService(session)
|
|
|
|
async def create_fleet(self, tenant_id: UUID, body: FleetCreate, *, actor: CurrentUser | None):
|
|
return await self.fleets.create(tenant_id, body, actor=actor)
|
|
|
|
async def update_fleet(
|
|
self, tenant_id: UUID, fleet_id: UUID, body: FleetUpdate, *, actor: CurrentUser | None
|
|
):
|
|
return await self.fleets.update(tenant_id, fleet_id, body, actor=actor)
|
|
|
|
async def delete_fleet(self, tenant_id: UUID, fleet_id: UUID, *, actor: CurrentUser | None):
|
|
return await self.fleets.soft_delete(tenant_id, fleet_id, actor=actor)
|
|
|
|
async def create_vehicle_type(
|
|
self, tenant_id: UUID, body: VehicleTypeCreate, *, actor: CurrentUser | None
|
|
):
|
|
return await self.types.create(tenant_id, body, actor=actor)
|
|
|
|
async def update_vehicle_type(
|
|
self, tenant_id: UUID, type_id: UUID, body: VehicleTypeUpdate, *, actor: CurrentUser | None
|
|
):
|
|
return await self.types.update(tenant_id, type_id, body, actor=actor)
|
|
|
|
async def delete_vehicle_type(
|
|
self, tenant_id: UUID, type_id: UUID, *, actor: CurrentUser | None
|
|
):
|
|
return await self.types.soft_delete(tenant_id, type_id, actor=actor)
|
|
|
|
async def create_vehicle(
|
|
self, tenant_id: UUID, body: VehicleCreate, *, actor: CurrentUser | None
|
|
):
|
|
return await self.vehicles.create(tenant_id, body, actor=actor)
|
|
|
|
async def update_vehicle(
|
|
self, tenant_id: UUID, vehicle_id: UUID, body: VehicleUpdate, *, actor: CurrentUser | None
|
|
):
|
|
return await self.vehicles.update(tenant_id, vehicle_id, body, actor=actor)
|
|
|
|
async def delete_vehicle(
|
|
self, tenant_id: UUID, vehicle_id: UUID, *, actor: CurrentUser | None
|
|
):
|
|
return await self.vehicles.soft_delete(tenant_id, vehicle_id, actor=actor)
|
|
|
|
async def create_assignment(
|
|
self,
|
|
tenant_id: UUID,
|
|
vehicle_id: UUID,
|
|
body: VehicleAssignmentCreate,
|
|
*,
|
|
actor: CurrentUser | None,
|
|
):
|
|
return await self.vehicles.create_assignment(
|
|
tenant_id, vehicle_id, body, actor=actor
|
|
)
|
|
|
|
async def update_assignment(
|
|
self,
|
|
tenant_id: UUID,
|
|
vehicle_id: UUID,
|
|
assignment_id: UUID,
|
|
body: VehicleAssignmentUpdate,
|
|
*,
|
|
actor: CurrentUser | None,
|
|
):
|
|
return await self.vehicles.update_assignment(
|
|
tenant_id, vehicle_id, assignment_id, body, actor=actor
|
|
)
|