Aller au contenu

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 503 explicite quand la table videos n'est pas encore disponible (aucun video:init lancé), 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

forge run

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 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)…",
}


class VideoListController(BaseController):

    @staticmethod
    def index(request: Request) -> Response:
        try:
            videos = VideoRepository().list_recent(limit=20)
        except Exception:
            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/except ne masque pas un bug : il traduit l'absence de table en réponse 503 pédagogique. Un starter de découverte ne doit jamais planter parce que l'infrastructure n'est pas encore montée.

À retenir

  • VideoRepository.list_recent lit 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.

Le détail d'une vidéo