Files
webcarto/backend/app/models.py
2026-02-09 00:01:29 +01:00

43 lines
1.4 KiB
Python

from datetime import datetime, timezone
from typing import Optional
from sqlmodel import SQLModel, Field, Column
import sqlalchemy as sa
class Dataset(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
raw_filename: str
feature_count: int = 0
bbox_json: Optional[str] = None # JSON string [minLng, minLat, maxLng, maxLat]
created_at: datetime = Field(
default_factory=lambda: datetime.now(timezone.utc),
sa_column=Column(sa.DateTime(timezone=True), default=sa.func.now()),
)
class Feature(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
dataset_id: int = Field(foreign_key="dataset.id", index=True)
geometry_json: str # GeoJSON geometry as JSON string
properties_json: str # GeoJSON properties as JSON string
class FeatureVersion(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
feature_id: int = Field(foreign_key="feature.id", index=True)
before_json: str
after_json: str
timestamp: datetime = Field(
default_factory=lambda: datetime.now(timezone.utc),
sa_column=Column(sa.DateTime(timezone=True), default=sa.func.now()),
)
class MapSettings(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
center_lng: float = 2.35
center_lat: float = 48.85
zoom: float = 5.0
base_layer: str = "vector"