From acdf6bf216c100de1f5e500535c0d8ccb194cb05 Mon Sep 17 00:00:00 2001 From: Kristian Borgwarth <10348902@pm.me> Date: Sun, 12 Apr 2026 23:25:36 +0200 Subject: [PATCH 1/3] cmt --- core/handlers/completion/complete_link_handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/handlers/completion/complete_link_handler.go b/core/handlers/completion/complete_link_handler.go index d81c728..4e460ef 100644 --- a/core/handlers/completion/complete_link_handler.go +++ b/core/handlers/completion/complete_link_handler.go @@ -27,6 +27,7 @@ func (h *CompleteLinkHandler) Handle(ctx context.Context, raw json.RawMessage) ( } slog.Debug("handling complete link command", "query", cmd.Query) + // this is just a stub and the client is expecting the title/display too return []completionItem{ {Slug: "standard-streams"}, {Slug: "unit-of-work"}, From 840460da57b3508e11a5adad9f0aa71ba9054b42 Mon Sep 17 00:00:00 2001 From: Kristian Borgwarth <10348902@pm.me> Date: Tue, 14 Apr 2026 05:41:29 +0200 Subject: [PATCH 2/3] feat(link_repo): use rdb for queries --- .../completion/complete_link_handler.go | 33 ++++++++++++------- persistence/repositories/link_repository.go | 14 ++++---- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/core/handlers/completion/complete_link_handler.go b/core/handlers/completion/complete_link_handler.go index 4e460ef..4ea8f17 100644 --- a/core/handlers/completion/complete_link_handler.go +++ b/core/handlers/completion/complete_link_handler.go @@ -4,20 +4,25 @@ import ( "context" "encoding/json" "log/slog" + + "github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories" ) type completeLinkCommand struct { Query string `json:"query"` } -type completionItem struct { - Slug string `json:"slug"` +type completeLinkResult struct { + Slug string `json:"slug"` + Display string `json:"display"` } -type CompleteLinkHandler struct{} +type CompleteLinkHandler struct { + linkRepo repositories.ILinkRepository +} -func NewCompleteLinkHandler() *CompleteLinkHandler { - return &CompleteLinkHandler{} +func NewCompleteLinkHandler(lr repositories.ILinkRepository) *CompleteLinkHandler { + return &CompleteLinkHandler{linkRepo: lr} } func (h *CompleteLinkHandler) Handle(ctx context.Context, raw json.RawMessage) (any, error) { @@ -25,12 +30,16 @@ func (h *CompleteLinkHandler) Handle(ctx context.Context, raw json.RawMessage) ( if err := json.Unmarshal(raw, &cmd); err != nil { return nil, err } - slog.Debug("handling complete link command", "query", cmd.Query) + links, err := h.linkRepo.Search(ctx, cmd.Query) + if err != nil { + slog.Error("Failed to search links", "error", err) + return nil, err + } - // this is just a stub and the client is expecting the title/display too - return []completionItem{ - {Slug: "standard-streams"}, - {Slug: "unit-of-work"}, - {Slug: "treesitter-basics"}, - }, nil + items := make([]completeLinkResult, len(links)) + for i, link := range links { + items[i] = completeLinkResult{Slug: link.TargetSlug(), Display: link.Display()} + } + + return items, nil } diff --git a/persistence/repositories/link_repository.go b/persistence/repositories/link_repository.go index dc45cbe..957b921 100644 --- a/persistence/repositories/link_repository.go +++ b/persistence/repositories/link_repository.go @@ -12,14 +12,16 @@ type ILinkRepository interface { Insert(ctx context.Context, dbContext persistence.IDbContext, links []*models.Link) error GetByNoteID(ctx context.Context, dbContext persistence.IDbContext, fromNoteID string) ([]*models.Link, error) GetBySlug(ctx context.Context, dbContext persistence.IDbContext, targetSlug string) ([]*models.Link, error) - Search(ctx context.Context, dbContext persistence.IDbContext, query string) ([]*models.Link, error) + Search(ctx context.Context, query string) ([]*models.Link, error) Delete(ctx context.Context, dbContext persistence.IDbContext, fromNoteID string) error } -type linkRepository struct{} +type linkRepository struct { + readDBContext persistence.ReadContext +} -func NewLinkRepository() ILinkRepository { - return &linkRepository{} +func NewLinkRepository(rdb persistence.ReadContext) ILinkRepository { + return &linkRepository{readDBContext: rdb} } func (r *linkRepository) Insert(ctx context.Context, dbContext persistence.IDbContext, links []*models.Link) error { @@ -81,8 +83,8 @@ func (r *linkRepository) GetBySlug(ctx context.Context, dbContext persistence.ID return links, nil } -func (r *linkRepository) Search(ctx context.Context, dbContext persistence.IDbContext, query string) ([]*models.Link, error) { - rows, err := dbContext.QueryContext(ctx, `SELECT id, from_note_id, target_slug, raw, display, line, col FROM link WHERE raw LIKE ?`, "%"+query+"%") +func (r *linkRepository) Search(ctx context.Context, query string) ([]*models.Link, error) { + rows, err := r.readDBContext.QueryContext(ctx, `SELECT id, from_note_id, target_slug, raw, display, line, col FROM link WHERE raw LIKE ?`, "%"+query+"%") if err != nil { return nil, err } From 5456d4c291ae20c4b3541ad40db7b857a215a254 Mon Sep 17 00:00:00 2001 From: Kristian Borgwarth <10348902@pm.me> Date: Tue, 14 Apr 2026 05:42:10 +0200 Subject: [PATCH 3/3] fix(main): di --- cmd/main.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index ab743c5..a950bc3 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -10,6 +10,7 @@ import ( "github.com/KristianJBorgwarth/dendrite.daemon/core/logging" "github.com/KristianJBorgwarth/dendrite.daemon/core/server" "github.com/KristianJBorgwarth/dendrite.daemon/core/services" + "github.com/KristianJBorgwarth/dendrite.daemon/persistence" "github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories" _ "modernc.org/sqlite" ) @@ -19,7 +20,7 @@ func main() { server := server.NewServer() uow := repositories.NewUnitOfWork(); - linkRepo := repositories.NewLinkRepository() + linkRepo := repositories.NewLinkRepository(*persistence.NewReadContext()) tagRepo := repositories.NewTagRepository() noteRepo := repositories.NewNoteRepository() tagService := services.NewTagService(tagRepo) @@ -29,7 +30,7 @@ func main() { server.RegisterHandler("vault/init", vault.NewInitializeHandler()) server.RegisterHandler("note/create", note.NewCreateNoteHandler(uow, tagService, noteRepo)) server.RegisterHandler("note/save", note.NewSaveNoteHandler(uow, noteRepo, tagService, noteService, linkService)) - server.RegisterHandler("completion/link", completion.NewCompleteLinkHandler()) + server.RegisterHandler("completion/link", completion.NewCompleteLinkHandler(linkRepo)) if err := server.Run(os.Stdin, os.Stdout); err != nil { slog.Error("server error", "error", err)