1from enum import Enum
 2from typing import List, Union, Optional
 3
 4from pydantic import BaseModel
 5
 6
 7class Table(str, Enum):
 8    orders = "orders"
 9    customers = "customers"
10    products = "products"
11
12
13class Column(str, Enum):
14    id = "id"
15    status = "status"
16    expected_delivery_date = "expected_delivery_date"
17    delivered_at = "delivered_at"
18    shipped_at = "shipped_at"
19    ordered_at = "ordered_at"
20    canceled_at = "canceled_at"
21
22
23class Operator(str, Enum):
24    eq = "="
25    gt = ">"
26    lt = "<"
27    le = "<="
28    ge = ">="
29    ne = "!="
30
31
32class OrderBy(str, Enum):
33    asc = "asc"
34    desc = "desc"
35
36
37class DynamicValue(BaseModel):
38    column_name: str
39
40
41class Condition(BaseModel):
42    column: str
43    operator: Operator
44    value: Union[str, int, DynamicValue]
45
46
47class Query(BaseModel):
48    name: Optional[str] = None
49    table_name: Table
50    columns: List[Column]
51    conditions: List[Condition]
52    order_by: OrderBy