dialogflowAPI / app /dto /request.py
OnlyBiggg
refactor code
df37f6e
from pydantic import BaseModel, field_validator
from typing import Any
from pydantic import BaseModel, Field
from app.dto.trip import TripDTO
class LocationRequest(BaseModel):
origin_office: str | None = None
departure_city: str | None = None
dest_office: str | None = None
destination_city: str | None = None
class TimeRequest(BaseModel):
time_select: dict | None = Field(default_factory=dict)
class TripQueryRequest(BaseModel):
departure_city: str | None = None
destination_city: str | None = None
origin_office: str | None = None
dest_office: str | None = None
ticket_number: int | None = None
date: dict | None = Field(default_factory=dict)
time_select: dict | None = Field(default_factory=dict)
id_selected: int | None = None
@field_validator("ticket_number", "id_selected", mode="before")
def validate_ticket_number(cls, v):
return int(v) if v else None
@field_validator("id_selected", mode="before")
def validate_selected_pickup(cls, v):
return int(v) if v else None
class TicketRequest(BaseModel):
user_name: str | None = None
phone_number: str | None = None
email: str | None = None
seat: str | None = None
pickup: str | None = None
dropoff: str | None = None
trip_data: TripDTO | None = None
class SeatQueryRequest(BaseModel):
seat: str | None = None
trip_data: TripDTO | None = None
class SessionInfo(BaseModel):
session: str | None = None
parameters: dict[str, Any] = Field(default_factory=dict)
class FulfillmentInfo(BaseModel):
tag: str | None = None
class DialogflowWebhookRequest(BaseModel):
text: str | None = None
sessionInfo: SessionInfo | None = None
fulfillmentInfo: FulfillmentInfo | None = None
detectIntentResponseId: str | None = None
def get_parameters(self) -> dict[str, Any]:
return self.sessionInfo.parameters if self.sessionInfo else {}
def get_session(self) -> str:
return (
self.sessionInfo.session
if self.sessionInfo and self.sessionInfo.session
else ""
)
def get_text(self) -> str:
return self.text.strip() if self.text else ""
def get_tag(self) -> str:
return (
self.fulfillmentInfo.tag
if self.fulfillmentInfo and self.fulfillmentInfo.tag
else ""
)
class StopRequest(BaseModel):
trip_data: TripDTO | None = None
id_selected: int | None = None
@field_validator("id_selected", mode="before")
def validate_selected_pickup(cls, v):
return int(v) if v else None