Skip to content

Commit e58642a

Browse files
committed
added routes table
1 parent 12a2fc4 commit e58642a

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from uuid import UUID, uuid4
2+
3+
from sqlmodel import Field, SQLModel, Relationship
4+
5+
from .base import BaseModel
6+
7+
8+
class RouteBase(SQLModel):
9+
"""Shared fields between table and API models"""
10+
11+
route_group_id: UUID | None = Field(
12+
foreign_key = "route_groups.id"
13+
)
14+
name: str = Field(default="", min_length=1, max_length=255) # can change this later
15+
notes: str = Field(default="", max_length=1000) # can change this later
16+
length: float = Field(ge=0.0) # in km, must be non-negative
17+
18+
19+
class Route(RouteBase, BaseModel, table=True):
20+
"""Database table model for Routes
21+
22+
Note: Routes are immutable once created
23+
"""
24+
25+
__tablename__ = "routes"
26+
27+
route_id: UUID = Field(
28+
default=uuid4,
29+
primary_key=True,
30+
nullable=False
31+
)
32+
33+
# Relationship to route stops
34+
route_stops: list["RouteStop"] = Relationship(
35+
back_populates="route",
36+
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
37+
)
38+
39+
40+
class RouteCreate(RouteBase):
41+
"""Create request model"""
42+
43+
pass
44+
45+
46+
class RouteRead(RouteBase):
47+
"""Read response model"""
48+
49+
route_id: UUID
50+
51+
52+
class RouteUpdate(SQLModel):
53+
"""Update request model - all optional
54+
55+
Note: Routes are meant to be immutable, but this allows updates if needed
56+
"""
57+
58+
route_group_id: UUID | None = None
59+
name: str | None = None
60+
notes: str | None = None
61+
length: float | None = None

0 commit comments

Comments
 (0)