feat(note/search): added search by tag notes (#34)

This commit is contained in:
Kristian 2026-04-26 16:04:03 +02:00 committed by GitHub
parent fda0286690
commit ce21a7fc9b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 60 additions and 1 deletions

View file

@ -38,6 +38,7 @@ func main() {
server.RegisterHandler("note/save", note.NewSaveNoteHandler(uow, noteRepo, tagService, noteService, linkService))
server.RegisterHandler("note/goto", note.NewGotoNoteHandler(noteRepo))
server.RegisterHandler("note/backlinks", note.NewGetBackLinksHandler(linkRepo, noteRepo))
server.RegisterHandler("note/search_by_tag", note.NewGetNotesByTagHandler(noteRepo))
server.RegisterHandler("completion/link", completion.NewCompleteLinkHandler(linkRepo))
server.RegisterHandler("completion/tag", completion.NewCompleteTagHandler(tagRepo))

View file

@ -0,0 +1,33 @@
package note
import (
"context"
"encoding/json"
"github.com/KristianJBorgwarth/dendrite.daemon/persistence/repositories"
)
type getNotesByTagCommand struct {
Tag string `json:"tag"`
}
type GetNotesByTagHandler struct {
noteRepo repositories.INoteRepository
}
func NewGetNotesByTagHandler(noteRepo repositories.INoteRepository) *GetNotesByTagHandler {
return &GetNotesByTagHandler{noteRepo: noteRepo}
}
func (h *GetNotesByTagHandler) Handle(ctx context.Context, raw json.RawMessage) (any, error) {
var cmd getNotesByTagCommand
if err := json.Unmarshal(raw, &cmd); err != nil {
return nil, err
}
notes, err := h.noteRepo.GetByTag(ctx, cmd.Tag)
if err != nil {
return nil, err
}
return notes, nil
}

BIN
dendrite

Binary file not shown.

View file

@ -15,6 +15,7 @@ type INoteRepository interface {
Update(ctx context.Context, dbContext persistence.IDbContext, noteID, path, title, slug string) error
GetBySlug(ctx context.Context, slug string) (*models.Note, error)
GetByPath(ctx context.Context, path string) (*models.Note, error)
GetByTag(ctx context.Context, tag string) ([]*models.Note, error)
GetNoteCount(ctx context.Context) (int, error)
}
@ -97,7 +98,7 @@ func (r *noteRepository) GetByPath(ctx context.Context, path string) (*models.No
}
return nil, err
}
return models.NewNote(id, path, title, slug, createdAt, updatedAt), nil
}
@ -113,3 +114,27 @@ func (r *noteRepository) GetNoteCount(ctx context.Context) (int, error) {
return count, nil
}
func (r *noteRepository) GetByTag(ctx context.Context, tag string) ([]*models.Note, error) {
rows, err := r.readDBContext.QueryContext(ctx, `
SELECT n.id, n.title, n.path, n.slug, n.created_at, n.updated_at
FROM note n
JOIN note_tag nt ON n.id = nt.note_id
JOIN tag t ON t.name = nt.tag_id
WHERE t.name LIKE ?`, "%"+tag+"%")
if err != nil {
return nil, err
}
defer rows.Close()
notes := make([]*models.Note, 0)
for rows.Next() {
var id, title, path, slug, createdAt, updatedAt string
if err := rows.Scan(&id, &title, &path, &slug, &createdAt, &updatedAt); err != nil {
return nil, err
}
notes = append(notes, models.NewNote(id, path, title, slug, createdAt, updatedAt))
}
return notes, nil
}