feat: tag system

This commit is contained in:
2026-02-03 09:41:03 +01:00
parent 3f5cf0d673
commit cb11e34798
11 changed files with 397 additions and 10 deletions

View File

@ -4,6 +4,7 @@ import (
"donniemarko/internal/note"
"donniemarko/internal/storage"
"sort"
"strings"
)
type NotesService struct {
@ -91,3 +92,33 @@ func (s *NotesService) GetNoteByHash(hash string) (*note.Note, error) {
func (s *NotesService) GetNotes() []*note.Note {
return s.storage.GetAll()
}
func (s *NotesService) AddTag(noteID, tag string) error {
tag = normalizeTag(tag)
if tag == "" {
return nil
}
if _, err := s.storage.Get(noteID); err != nil {
return err
}
return s.storage.AddTag(noteID, tag)
}
func (s *NotesService) RemoveTag(noteID, tag string) error {
tag = normalizeTag(tag)
if tag == "" {
return nil
}
if _, err := s.storage.Get(noteID); err != nil {
return err
}
return s.storage.RemoveTag(noteID, tag)
}
func normalizeTag(tag string) string {
return strings.ToLower(strings.TrimSpace(tag))
}

View File

@ -46,3 +46,31 @@ func TestQueryNotes_WithSearch(t *testing.T) {
t.Error("wrong note returned")
}
}
func TestTags_NormalizationAndRemove(t *testing.T) {
err := service.AddTag("test1", " Go ")
if err != nil {
t.Fatalf("add tag: %v", err)
}
n, err := service.GetNoteByHash("test1")
if err != nil {
t.Fatalf("get note: %v", err)
}
if len(n.Tags) != 1 || n.Tags[0] != "go" {
t.Fatalf("expected normalized tag, got %+v", n.Tags)
}
err = service.RemoveTag("test1", "GO")
if err != nil {
t.Fatalf("remove tag: %v", err)
}
n, err = service.GetNoteByHash("test1")
if err != nil {
t.Fatalf("get note: %v", err)
}
if len(n.Tags) != 0 {
t.Fatalf("expected tag to be removed, got %+v", n.Tags)
}
}