"""Availability command handlers — Phase 10.3.""" from __future__ import annotations from uuid import UUID from sqlalchemy.ext.asyncio import AsyncSession from app.schemas.availability import ( DriverAvailabilityUpsert, ShiftAssignmentCreate, ShiftAssignmentUpdate, ShiftCreate, ShiftUpdate, WorkingZoneCreate, WorkingZoneUpdate, ) from app.services.availability import AvailabilityService, ShiftService, WorkingZoneService from shared.security import CurrentUser class AvailabilityCommands: def __init__(self, session: AsyncSession) -> None: self.availability = AvailabilityService(session) self.shifts = ShiftService(session) self.zones = WorkingZoneService(session) async def upsert_availability( self, tenant_id: UUID, driver_id: UUID, body: DriverAvailabilityUpsert, *, actor: CurrentUser | None, ): return await self.availability.upsert_for_driver( tenant_id, driver_id, body, actor=actor ) async def create_shift( self, tenant_id: UUID, body: ShiftCreate, *, actor: CurrentUser | None ): return await self.shifts.create(tenant_id, body, actor=actor) async def update_shift( self, tenant_id: UUID, shift_id: UUID, body: ShiftUpdate, *, actor: CurrentUser | None ): return await self.shifts.update(tenant_id, shift_id, body, actor=actor) async def delete_shift( self, tenant_id: UUID, shift_id: UUID, *, actor: CurrentUser | None ): return await self.shifts.soft_delete(tenant_id, shift_id, actor=actor) async def assign_shift( self, tenant_id: UUID, shift_id: UUID, body: ShiftAssignmentCreate, *, actor: CurrentUser | None, ): return await self.shifts.assign_driver(tenant_id, shift_id, body, actor=actor) async def update_shift_assignment( self, tenant_id: UUID, shift_id: UUID, assignment_id: UUID, body: ShiftAssignmentUpdate, *, actor: CurrentUser | None, ): return await self.shifts.update_assignment( tenant_id, shift_id, assignment_id, body, actor=actor ) async def create_zone( self, tenant_id: UUID, body: WorkingZoneCreate, *, actor: CurrentUser | None ): return await self.zones.create(tenant_id, body, actor=actor) async def update_zone( self, tenant_id: UUID, zone_id: UUID, body: WorkingZoneUpdate, *, actor: CurrentUser | None ): return await self.zones.update(tenant_id, zone_id, body, actor=actor) async def delete_zone( self, tenant_id: UUID, zone_id: UUID, *, actor: CurrentUser | None ): return await self.zones.soft_delete(tenant_id, zone_id, actor=actor)