from pydantic import BaseModel from typing import List from typing import Literal class AddressCreate(BaseModel): user_id: int flat: str building: str landmark: str = None lat: float lng: float address_type: Literal["HOME", "WORK", "OTHER"] = "HOME" frontend_ip: str class OrderItemRequest(BaseModel): menu_item_id: int quantity: int vendor_id: int class OrderCreate(BaseModel): frontend_ip: str | None = None user_id: int lat: float lng: float items: List[OrderItemRequest] class AssignDelivery(BaseModel): order_id: int delivery_boy_id: int class UpdateDeliveryStatus(BaseModel): order_id: int status: str # ASSIGNED / PICKED / DELIVERED class DeliveryPayment(BaseModel): order_id: int payment_method: str payment_proof: str | None = None amount: float # User Login class UserCreate(BaseModel): name: str phone: str email: str class SendOTP(BaseModel): phone: str class VerifyOTP(BaseModel): phone: str otp: str name: str = None email: str = None # ✅ NEW frontend_ip: str | None = None # ================= ADMIN ================= class AdminLogin(BaseModel): email: str password: str class CreateZonalAdmin(BaseModel): name: str email: str password: str zone: str class VendorCreate(BaseModel): name: str location: str flat: str = None building: str = None landmark: str = None lat: float | None = None lng: float | None = None email: str password: str class DeliveryBoyCreate(BaseModel): name: str email: str phone: str password: str class DeliveryBoyLogin(BaseModel): email: str password: str frontend_ip: str | None = None class ReviewCreate(BaseModel): user_id: int order_id: int rating: int comment: str | None = None # ========================= # SUPPORT TICKET # ========================= class SupportTicketCreate(BaseModel): user_id: int message: str frontend_ip: str | None = None