Files
donniemarko/internal/storage/storage.go
2026-02-01 11:55:16 +01:00

68 lines
1.3 KiB
Go

package storage
import (
"donniemarko/internal/note"
"fmt"
"strings"
)
type Storage interface {
GetAll() []*note.Note
Get(id string) (*note.Note, error)
Create(n *note.Note) error
Delete(id string)
Update(id string, n *note.Note)
Search(query string) []*note.Note
}
type NoteStorage struct {
Index map[string]*note.Note
}
func NewNoteStorage() *NoteStorage {
return &NoteStorage{Index: make(map[string]*note.Note)}
}
func (ns *NoteStorage) GetAll() []*note.Note {
notes := make([]*note.Note, 0, len(ns.Index))
// Step 3: Iterate over the map
for _, value := range ns.Index {
notes = append(notes, value)
}
return notes
}
func (ns *NoteStorage) Get(id string) (*note.Note, error) {
n, ok := ns.Index[id]
if ok {
return n, nil
}
return nil, fmt.Errorf("No note with id '%s'", id)
}
func (ns *NoteStorage) Create(n *note.Note) error {
ns.Index[n.ID] = n
return nil
}
func (ns *NoteStorage) Delete(id string) {
delete(ns.Index, id)
}
func (ns *NoteStorage) Update(id string, n *note.Note) {
ns.Index[id] = n
}
func (ns *NoteStorage) Search(query string) []*note.Note{
results := []*note.Note{}
for _, note := range ns.Index {
lowContent := strings.ToLower(string(note.Content))
lowQuery := strings.ToLower(query)
if strings.Contains(lowContent, lowQuery) {
results = append(results, note)
}
}
return results
}