File size: 2,629 Bytes
df37f6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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