diff --git a/frontend/internal/handlers/tags.go b/frontend/internal/handlers/tags.go index 84a0725..c7e7111 100644 --- a/frontend/internal/handlers/tags.go +++ b/frontend/internal/handlers/tags.go @@ -110,11 +110,33 @@ func (a *App) EditTag(w http.ResponseWriter, r *http.Request) { return } + // Optional file upload: if a photo file is present, store it and use it; + // otherwise fall back to the photo_url text value. + photoURL := strings.TrimSpace(r.FormValue("photo_url")) + if err := r.ParseMultipartForm(10 << 20); err == nil { + if file, header, ferr := r.FormFile("photo"); ferr == nil { + ct := header.Header.Get("Content-Type") + if strings.HasPrefix(ct, "image/") && a.Storage != nil { + ext := strings.ToLower(filepath.Ext(header.Filename)) + if ext == "" { + ext = ".jpg" + } + key := fmt.Sprintf("tags/%d%s", tag.ID, ext) + if perr := a.Storage.Put(r.Context(), key, file, header.Size, ct); perr == nil { + photoURL = "/photos/" + key + } + file.Close() + } else if ferr == nil { + file.Close() + } + } + } + params := db.UpdateTagDetailsParams{ ID: tag.ID, ItemType: textOrNil(strings.TrimSpace(r.FormValue("item_type"))), Description: textOrNil(strings.TrimSpace(r.FormValue("description"))), - PhotoUrl: textOrNil(strings.TrimSpace(r.FormValue("photo_url"))), + PhotoUrl: textOrNil(photoURL), Phone: textOrNil(strings.TrimSpace(r.FormValue("phone"))), Address: textOrNil(strings.TrimSpace(r.FormValue("address"))), Notes: textOrNil(strings.TrimSpace(r.FormValue("notes"))), diff --git a/frontend/templates/tag-edit.html b/frontend/templates/tag-edit.html index 7b3831e..4427bd5 100644 --- a/frontend/templates/tag-edit.html +++ b/frontend/templates/tag-edit.html @@ -8,7 +8,7 @@ {{if .Error}}
{{.Error}}
{{end}} - - -Upload a photo — it shows on your public tag page and in the admin.
-