package api import ( "net/http" "strconv" ) func (a *API) HandleListImages(w http.ResponseWriter, r *http.Request) { tags := r.URL.Query()["tags"] page, _ := strconv.Atoi(r.URL.Query().Get("page")) if page < 1 { page = 1 } perPage, _ := strconv.Atoi(r.URL.Query().Get("per_page")) if perPage < 1 || perPage > 100 { perPage = 20 } offset := (page - 1) * perPage result, err := a.DB.ListImages(r.Context(), tags, perPage, offset) if err != nil { writeError(w, http.StatusInternalServerError, "failed to list images") return } // Load tags for each image. for i := range result.Images { tags, err := a.DB.GetImageTags(r.Context(), result.Images[i].ID) if err != nil { continue } result.Images[i].Tags = tags } writeJSON(w, http.StatusOK, map[string]any{ "images": result.Images, "total": result.Total, "page": page, "per_page": perPage, }) } func (a *API) HandleGetImage(w http.ResponseWriter, r *http.Request) { idStr := r.PathValue("id") id, err := strconv.ParseInt(idStr, 10, 64) if err != nil { writeError(w, http.StatusBadRequest, "invalid image id") return } img, err := a.DB.GetImageByID(r.Context(), id) if err != nil { writeError(w, http.StatusNotFound, "image not found") return } writeJSON(w, http.StatusOK, img) }