From b32873fc76d0c40cc34a4b48d18e0fe5846254a8 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Mon, 6 Jul 2026 07:37:06 +0200 Subject: [PATCH] feat: add episode titles api endpoint --- internal/playback/handler/handler.go | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/internal/playback/handler/handler.go b/internal/playback/handler/handler.go index 8f565374..459926ce 100644 --- a/internal/playback/handler/handler.go +++ b/internal/playback/handler/handler.go @@ -40,12 +40,46 @@ func (h *PlaybackHandler) Register(r *gin.Engine) { r.GET("/anime/:id/watch", h.HandleWatchPage) r.POST("/api/watch-progress", h.HandleSaveProgress) r.POST("/api/watch-complete", h.HandleWatchComplete) + r.GET("/api/watch/episodes/:animeId/titles", h.HandleEpisodeTitles) r.GET("/api/watch/episode/:animeId/:episode", h.HandleEpisodeData) r.POST("/api/watch/segments", h.HandleUpsertSkipSegment) r.GET("/watch/proxy/stream", h.HandleProxyStream) r.GET("/watch/proxy/subtitle", h.HandleProxySubtitle) } +func (h *PlaybackHandler) HandleEpisodeTitles(c *gin.Context) { + animeID, err := strconv.Atoi(c.Param("animeId")) + if err != nil || animeID <= 0 { + server.RespondHTMLOrJSONError(c, http.StatusBadRequest, "invalid anime id") + return + } + + enricher, ok := h.svc.(domain.PlaybackEpisodeTitleService) + if !ok { + server.RespondHTMLOrJSONError(c, http.StatusServiceUnavailable, "episode titles are unavailable") + return + } + episodes, err := enricher.EnrichEpisodeTitles(c.Request.Context(), animeID) + if err != nil { + server.RespondError( + c, + http.StatusBadGateway, + "watch_episode_titles_failed", + "playback", + "episode titles are unavailable", + map[string]any{"anime_id": animeID}, + err, + ) + return + } + + titles := make([]gin.H, 0, len(episodes)) + for _, episode := range episodes { + titles = append(titles, gin.H{"number": episode.Number, "title": episode.Title}) + } + c.JSON(http.StatusOK, titles) +} + func (h *PlaybackHandler) HandleWatchPage(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil || id <= 0 {