infinite scroll

This commit is contained in:
Gabriel Radureau
2025-10-13 15:05:54 +02:00
parent cc9fb9cede
commit 0fa5a30809
10 changed files with 274 additions and 263 deletions

55
app/models.py Normal file
View File

@@ -0,0 +1,55 @@
# models.py
from pydantic import BaseModel, Field, validator
from typing import Optional, List
import db
class Video(BaseModel):
file_name: str
raw_file: str = Field(..., description="Identifiant unique de la vidéo")
duration: Optional[float] = None
mp4_file: Optional[str] = None
mp4_file_name: Optional[str] = None
rotated_file: Optional[str] = None
thumbnail_file: Optional[str] = None
record_datetime: Optional[str] = None
day_of_week: Optional[str] = None
lat: Optional[float] = None
long: Optional[float] = None
address: Optional[str] = None
difficulty_level: Optional[str] = Field("Tout niveau", description="Niveau de difficulté")
# --- propriétés pratiques ---
@property
def id(self) -> str:
"""Identifiant unique (basé sur file_name)."""
return self.file_name
@property
def title(self) -> str:
"""Nom court à afficher."""
return self.mp4_file_name or self.file_name
@property
def difficulty_display(self) -> str:
return self.difficulty_level or "Tout niveau"
# --- Méthodes métiers ---
def load_labels(self) -> List[str]:
return db.load_video_labels(self.file_name)
def save_labels(self, label_names: List[str]):
db.save_video_labels(self.file_name, label_names)
# --- Validation optionnelle ---
@validator("raw_file")
def validate_raw_file(cls, v):
if not v or not isinstance(v, str):
raise ValueError("raw_file doit être une chaîne non vide")
return v
@validator("duration")
def validate_duration(cls, v):
if v is not None and v < 0:
raise ValueError("duration ne peut pas être négative")
return v