Lister les vidéos¶
Objectif : lire les vidéos déjà enregistrées par le module et les renvoyer en
JSON.
Ce que vous allez apprendre : le VideoRepository et sa méthode
list_recent, qui renvoie les dernières vidéos de la table videos (ordre du
plus récent). Et un réflexe Forge : rester pédagogique quand la table
n'existe pas encore, au lieu de planter.
Palier 2 du niveau débutant de la progression vidéo, après
Bonjour Forge Vidéo.
Ce que ce starter montre¶
- la lecture des dernières vidéos via
VideoRepository.list_recent; - une réponse JSON
{ "videos": [...] }; - une réponse
503explicite quand la tablevideosn'est pas encore
disponible (aucunvideo:initlancé), au lieu d'une erreur brute.
Aucun ffmpeg, aucune écriture.
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_video.storage.repository.VideoRepository |
Lire les vidéos enregistrées. | Parcours vidéo |
VideoRepository.list_recent |
Dernières vidéos (ordre décroissant). | Parcours vidéo |
Response.json |
Renvoyer les vidéos (ou l'erreur) en JSON. | Response |
Tester¶
Ouvrez https://localhost:8000/video-list. Sans table créée, la route répond
503 avec un message qui invite à lancer forge video:init. Une fois des vidéos
enregistrées (niveau intermédiaire), elle renvoie la liste.
Le contrôleur¶
# mvc/controllers/video_list_controller.py
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
from forge_mvc_video.storage.repository import VideoRepository
_STORAGE_NOT_READY = {
"error": "video_storage_not_ready",
"message": (
"La table videos n'est pas encore disponible. "
"Applique la migration Forge Vidéo (forge video:init) avant de "
"lister les vidéos."
),
}
class VideoListController(BaseController):
@staticmethod
def index(request: Request) -> Response:
try:
videos = VideoRepository().list_recent(limit=20)
except Exception:
# Table absente, base inaccessible… — on reste pédagogique.
return Response.json(_STORAGE_NOT_READY, status=503)
return Response.json({"videos": videos})
Comprendre ce code¶
VideoRepository()utilise par défaut l'accès base de Forge
(core.database.db), aucun branchement manuel.list_recent(limit=20)renvoie les 20 dernières vidéos sous forme de
dictionnaires, directement sérialisables en JSON.- Le
try/exceptne masque pas un bug : il traduit l'absence de table en
réponse503pédagogique. Un starter de découverte ne doit jamais planter
parce que l'infrastructure n'est pas encore montée.
La route¶
Ajoutez la route dans le groupe public de mvc/routes.py.
# mvc/routes.py
from mvc.controllers.video_list_controller import VideoListController
with router.group("", public=True) as public:
public.add("GET", "/video-list", VideoListController.index, name="video_list_index")
À retenir¶
VideoRepository.list_recentlit les dernières vidéos enregistrées.- Le repository s'appuie sur l'accès base standard de Forge.
- Un starter de découverte reste pédagogique quand la table manque (
503).
Après ce starter¶
Vous savez lister les vidéos. La suite : afficher le détail d'une vidéo.