diff options
Diffstat (limited to 'internal/api/handlers_media.go')
| -rw-r--r-- | internal/api/handlers_media.go | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/internal/api/handlers_media.go b/internal/api/handlers_media.go index 1469342..3863ab0 100644 --- a/internal/api/handlers_media.go +++ b/internal/api/handlers_media.go @@ -30,7 +30,7 @@ func (s *Server) handleListSets(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, sets) } -func (s *Server) handleSetCover(w http.ResponseWriter, r *http.Request) { +func (s *Server) handleGetSetCover(w http.ResponseWriter, r *http.Request) { if !requireService(w, s.mediaSvc) { return } @@ -39,7 +39,34 @@ func (s *Server) handleSetCover(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid set id"}) return } - if err := s.mediaSvc.RegenerateSetCover(r.Context(), setID, userIDFromContext(r)); err != nil { + folder := r.URL.Query().Get("folder") + fr, err := s.mediaSvc.GetSetCover(r.Context(), setID, folder, userIDFromContext(r)) + if err != nil { + if errors.Is(err, service.ErrNotFound) { + writeJSON(w, http.StatusNotFound, map[string]string{"error": "not found"}) + return + } + if errors.Is(err, service.ErrForbidden) { + writeJSON(w, http.StatusForbidden, map[string]string{"error": "forbidden"}) + return + } + writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) + return + } + http.ServeFile(w, r, fr.Path) +} + +func (s *Server) handlePostSetCover(w http.ResponseWriter, r *http.Request) { + if !requireService(w, s.mediaSvc) { + return + } + setID := pathID(r, "id") + if setID == 0 { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid set id"}) + return + } + folder := r.URL.Query().Get("folder") + if err := s.mediaSvc.RegenerateSetCover(r.Context(), setID, folder, userIDFromContext(r)); err != nil { if errors.Is(err, service.ErrNotFound) { writeJSON(w, http.StatusNotFound, map[string]string{"error": "not found"}) return @@ -54,6 +81,28 @@ func (s *Server) handleSetCover(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, map[string]string{"status": "ok"}) } +func (s *Server) handleBrowseSet(w http.ResponseWriter, r *http.Request) { + if !requireService(w, s.mediaSvc) { + return + } + setID := pathID(r, "id") + if setID == 0 { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid set id"}) + return + } + parent := r.URL.Query().Get("parent") + result, err := s.mediaSvc.BrowseSet(r.Context(), setID, userIDFromContext(r), parent) + if err != nil { + if errors.Is(err, service.ErrForbidden) { + writeJSON(w, http.StatusForbidden, map[string]string{"error": "forbidden"}) + return + } + writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) + return + } + writeJSON(w, http.StatusOK, result) +} + func (s *Server) handleUpload(w http.ResponseWriter, r *http.Request) { if !requireService(w, s.mediaSvc) { return |
