etape laptop
This commit is contained in:
42
backend/app/models.py
Normal file
42
backend/app/models.py
Normal file
@@ -0,0 +1,42 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user