package store import ( "time" "git.tukangketik.id/swanadiva/hostkeeper/v2/internal/model" ) type SnippetStore struct { snippets []model.Snippet } func NewSnippetStore() *SnippetStore { s := &SnippetStore{} mu.RLock() readFile("snippets.json", &s.snippets) mu.RUnlock() if s.snippets == nil { s.snippets = []model.Snippet{} } return s } func (s *SnippetStore) All() []model.Snippet { mu.RLock() defer mu.RUnlock() return s.snippets } func (s *SnippetStore) Search(q, collection, tag string) []model.Snippet { mu.RLock() defer mu.RUnlock() var res []model.Snippet for _, sn := range s.snippets { if q != "" && !contains(sn.Name, q) && !contains(sn.Content, q) && !contains(sn.Language, q) { continue } if collection != "" && sn.Collection != collection { continue } if tag != "" { found := false for _, t := range sn.Tags { if t == tag { found = true break } } if !found { continue } } res = append(res, sn) } return res } func (s *SnippetStore) Add(name, content, language string, tags []string, description, collection string) model.Snippet { mu.Lock() defer mu.Unlock() sn := model.Snippet{ ID: randID(), Name: name, Content: content, Language: language, Description: description, Collection: collection, Icon: "FileText", Tags: tags, CreatedAt: time.Now().Format("Jan 2, 2006"), } s.snippets = append(s.snippets, sn) writeFile("snippets.json", &s.snippets) return sn } func (s *SnippetStore) Delete(id string) { mu.Lock() defer mu.Unlock() for i, sn := range s.snippets { if sn.ID == id { s.snippets = append(s.snippets[:i], s.snippets[i+1:]...) writeFile("snippets.json", &s.snippets) return } } }