feat: tag system
This commit is contained in:
@ -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))
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user