"""Modele ORM d'une carte explicitement partagee par son proprietaire.""" from __future__ import annotations from datetime import UTC, datetime from sqlalchemy import DateTime, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base def utcnow() -> datetime: return datetime.now(UTC) class SharedMap(Base): """Snapshot serveur d'une carte, cree uniquement sur action de l'utilisateur.""" __tablename__ = "shared_maps" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) # Identifiant public present dans l'URL /s/. share_token: Mapped[str] = mapped_column(String(64), unique=True, index=True, nullable=False) # Seul le hash du management token est stocke : le secret n'existe que # dans l'IndexedDB du proprietaire. management_token_hash: Mapped[str] = mapped_column(String(64), nullable=False) title: Mapped[str] = mapped_column(String(255), nullable=False, default="") map_version: Mapped[int] = mapped_column(Integer, nullable=False, default=1) map_data: Mapped[str] = mapped_column(Text, nullable=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=utcnow, onupdate=utcnow ) def __repr__(self) -> str: # pragma: no cover - aide au debug uniquement return f""