summaryrefslogtreecommitdiff
path: root/internal/api
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-02 11:45:27 +0300
committerPaul Buetow <paul@buetow.org>2026-05-02 11:45:27 +0300
commit23d017ff90abfe7aeea7fb43619d7469e3ec0c2a (patch)
tree95380288fa9d7ee362e43f5f91dcfd3370a79469 /internal/api
parent5275a0a4cec129bc1ea66beab934bf472f7a7fd2 (diff)
more on this
Diffstat (limited to 'internal/api')
-rw-r--r--internal/api/handlers_media.go53
-rw-r--r--internal/api/handlers_more_test.go2
-rw-r--r--internal/api/server.go4
3 files changed, 55 insertions, 4 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
diff --git a/internal/api/handlers_more_test.go b/internal/api/handlers_more_test.go
index 23e94c7..e5d8529 100644
--- a/internal/api/handlers_more_test.go
+++ b/internal/api/handlers_more_test.go
@@ -339,7 +339,7 @@ func TestServer_SetCover(t *testing.T) {
var ms service.MediaService
if !tt.svcNil {
ms = &service.MockMediaService{
- RegenerateSetCoverFunc: func(ctx context.Context, setID, userID int64) error {
+ RegenerateSetCoverFunc: func(ctx context.Context, setID int64, folder string, userID int64) error {
return tt.svcErr
},
}
diff --git a/internal/api/server.go b/internal/api/server.go
index 6c15c78..1855148 100644
--- a/internal/api/server.go
+++ b/internal/api/server.go
@@ -112,7 +112,9 @@ func (s *Server) routes() {
// Sets
s.mux.Handle("GET /api/sets", s.mw.RequireSession(http.HandlerFunc(s.handleListSets)))
- s.mux.Handle("POST /api/sets/{id}/cover", s.mw.RequireSession(http.HandlerFunc(s.handleSetCover)))
+ s.mux.Handle("GET /api/sets/{id}/browse", s.mw.RequireSession(http.HandlerFunc(s.handleBrowseSet)))
+ s.mux.Handle("GET /api/sets/{id}/cover", s.mw.RequireSession(http.HandlerFunc(s.handleGetSetCover)))
+ s.mux.Handle("POST /api/sets/{id}/cover", s.mw.RequireSession(http.HandlerFunc(s.handlePostSetCover)))
s.mux.Handle("POST /api/sets/{id}/upload", s.mw.RequireSession(http.HandlerFunc(s.handleUpload)))
// Media