commit 9b589a6a2e706f014a25d9eec729b66bb4bdc597
parent 827f058496f980b3d6c00922da5acb015544e697
Author: David Eisinger <[email protected]>
Date: Tue, 7 Oct 2025 15:45:47 -0400
Update title/desc when resaving
Diffstat:
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/internal/api.go b/internal/api.go
@@ -490,26 +490,45 @@ func NewHandlerWithConfig(db *DB, cfg HandlerConfig) (http.Handler, error) {
http.Error(w, "internal server error", http.StatusInternalServerError)
return
} else if existing != nil {
- if isHTML {
- if err := db.SaveArchive(r.Context(), existing.ID, txt); err != nil {
- log.Printf("save archive error: %v", err)
- http.Error(w, "internal server error", http.StatusInternalServerError)
- return
+ // Merge metadata updates per request: title (if non-blank),
+ // description (if provided and non-blank; otherwise preserve),
+ // and public (if provided; otherwise preserve).
+ newTitle := existing.Title
+ if strings.TrimSpace(req.Title) != "" {
+ newTitle = req.Title
+ }
+ var newDesc *string
+ if req.Description == nil || strings.TrimSpace(*req.Description) == "" {
+ if existing.Description.Valid {
+ d := existing.Description.String
+ newDesc = &d
+ } else {
+ newDesc = nil
}
+ } else {
+ newDesc = req.Description
}
- if err := db.TouchBookmark(r.Context(), existing.ID); err != nil {
- log.Printf("save archive error: %v", err)
- http.Error(w, "internal server error", http.StatusInternalServerError)
- return
+ newPub := existing.Public
+ if req.Public != nil {
+ newPub = *req.Public
}
- updated, err := db.GetBookmark(r.Context(), existing.ID)
+
+ // Apply metadata update first so archive reindex uses latest fields.
+ updated, err := db.UpdateBookmark(r.Context(), existing.ID, existing.URL, newTitle, newDesc, newPub)
if err != nil || updated == nil {
if err != nil {
- log.Printf("refetch bookmark error: %v", err)
+ log.Printf("update existing bookmark error: %v", err)
}
http.Error(w, "internal server error", http.StatusInternalServerError)
return
}
+ if isHTML {
+ if err := db.SaveArchive(r.Context(), existing.ID, txt); err != nil {
+ log.Printf("save archive error: %v", err)
+ http.Error(w, "internal server error", http.StatusInternalServerError)
+ return
+ }
+ }
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(toRespWithArchive(r.Context(), db, updated))
return