From 06ed2c3cbee5f1c0c0b56ea0035c51b8a281e4e3 Mon Sep 17 00:00:00 2001 From: adminoo Date: Tue, 3 Feb 2026 11:34:24 +0100 Subject: [PATCH] fix: changed detected by scanner but no updated by render layer --- internal/scanner/handler.go | 4 +++- internal/storage/sqlite.go | 7 +++++++ internal/storage/sqlite_test.go | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/internal/scanner/handler.go b/internal/scanner/handler.go index 545a230..f397401 100644 --- a/internal/scanner/handler.go +++ b/internal/scanner/handler.go @@ -22,7 +22,9 @@ func (h *NotesHandler) HandleCreate(path string) error { if err != nil { return err } - h.storage.Create(note) + if err := h.storage.Create(note); err != nil { + return err + } log.Printf("Created or updated note '%s'\n", path) return nil } diff --git a/internal/storage/sqlite.go b/internal/storage/sqlite.go index 52f8209..a879e77 100644 --- a/internal/storage/sqlite.go +++ b/internal/storage/sqlite.go @@ -113,6 +113,13 @@ func (s *SQLiteStorage) Create(n *note.Note) error { _, err := s.db.Exec(` INSERT INTO notes (id, path, title, content, updated_at, size, published) VALUES (?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(id) DO UPDATE SET + path = excluded.path, + title = excluded.title, + content = excluded.content, + updated_at = excluded.updated_at, + size = excluded.size, + published = excluded.published `, n.ID, n.Path, diff --git a/internal/storage/sqlite_test.go b/internal/storage/sqlite_test.go index d3c26c9..e16ab32 100644 --- a/internal/storage/sqlite_test.go +++ b/internal/storage/sqlite_test.go @@ -211,3 +211,28 @@ func TestSQLiteStorage_SearchByTag(t *testing.T) { t.Fatalf("expected tag match to be n2") } } + +func TestSQLiteStorage_Create_Upsert(t *testing.T) { + st := newSQLiteStorage(t) + + ts := time.Date(2026, 2, 3, 12, 0, 0, 0, time.UTC) + n := sampleNote("n1", "notes/alpha.md", "Alpha", "one", ts) + if err := st.Create(n); err != nil { + t.Fatalf("create note: %v", err) + } + + n.Content = "updated" + n.Title = "Alpha Updated" + n.UpdatedAt = ts.Add(2 * time.Hour) + if err := st.Create(n); err != nil { + t.Fatalf("upsert note: %v", err) + } + + got, err := st.Get("n1") + if err != nil { + t.Fatalf("get note: %v", err) + } + if got.Title != "Alpha Updated" || got.Content != "updated" { + t.Fatalf("expected note to be updated, got %+v", got) + } +}