refactor to use app package instead of service

refactor app to be composable
This commit is contained in:
Robin Olsen
2026-02-28 23:30:31 +01:00
parent ba4d3df669
commit aabce0b0b2
56 changed files with 385 additions and 279 deletions

54
internal/storage/json.go Normal file
View File

@@ -0,0 +1,54 @@
package storage
import (
"encoding/json"
"os"
"sync"
)
type Storage[T any] struct {
mu sync.RWMutex
path string
Data *T
}
func NewJsonStorage[T any](path string, defaultData *T) *Storage[T] {
return &Storage[T]{
path: path,
Data: defaultData,
}
}
func (s *Storage[T]) Save() error {
s.mu.Lock()
defer s.mu.Unlock()
data, err := json.MarshalIndent(s.Data, "", " ")
if err != nil {
return err
}
return os.WriteFile(s.path, data, 0644)
}
func (s *Storage[T]) Load() error {
s.mu.Lock()
defer s.mu.Unlock()
bytes, err := os.ReadFile(s.path)
if err != nil {
if os.IsNotExist(err) {
return nil
}
return err
}
return json.Unmarshal(bytes, s.Data)
}
func (s *Storage[T]) Init() error {
if _, err := os.Stat(s.path); os.IsNotExist(err) {
return s.Save()
}
return s.Load()
}