from typing import List, Optional from pydantic import BaseModel from datetime import date, datetime from app.models.movement import MovementType class MovementBase(BaseModel): movement_type: MovementType aircraft_registration: str aircraft_type: Optional[str] = None callsign: Optional[str] = None timestamp: datetime entity_type: str entity_id: int to_location: Optional[str] = None from_location: Optional[str] = None runway: Optional[str] = None wind: Optional[str] = None pressure_setting: Optional[str] = None created_by: Optional[str] = None ip_address: Optional[str] = None notes: Optional[str] = None class MovementCreate(MovementBase): pass class BulkMovementLog(BaseModel): flight_kind: str movement_date: date movement_time: Optional[str] = None takeoff_time: Optional[str] = None landing_time: Optional[str] = None contact_time: Optional[str] = None qsy_time: Optional[str] = None aircraft_registration: str aircraft_type: Optional[str] = None callsign: Optional[str] = None from_location: Optional[str] = None to_location: Optional[str] = None pob: Optional[int] = None local_nature: Optional[str] = None circuits: Optional[int] = None runway: Optional[str] = None wind: Optional[str] = None pressure_setting: Optional[str] = None notes: Optional[str] = None ppr_id: Optional[int] = None movement_id: Optional[int] = None class BulkMovementContext(BaseModel): pprs: List[dict] movements: List[dict] suggested: dict class Movement(MovementBase): id: int created_at: datetime class Config: from_attributes = True class BulkMovementResult(BaseModel): action: str movement: Movement entity_type: str entity_id: int message: str