29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from datetime import datetime, timezone
|
|
from typing import Optional
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
|
|
class Media(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
entity_type: str # jardin|plante|adventice|outil|plantation|bibliotheque
|
|
entity_id: int
|
|
url: str
|
|
thumbnail_url: Optional[str] = None
|
|
titre: Optional[str] = None
|
|
# Identification automatique
|
|
identified_species: Optional[str] = None
|
|
identified_common: Optional[str] = None
|
|
identified_confidence: Optional[float] = None
|
|
identified_source: Optional[str] = None # "plantnet" | "yolo" | "cache"
|
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class Attachment(SQLModel, table=True):
|
|
id: Optional[int] = Field(default=None, primary_key=True)
|
|
entity_type: str
|
|
entity_id: int
|
|
type: str # pdf|url|note
|
|
titre: Optional[str] = None
|
|
contenu: Optional[str] = None
|
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|