data package handles AppContext and Records

This commit is contained in:
agatha 2024-05-12 15:45:19 -04:00
parent 7aa3760711
commit 3ae5ea780e

46
data/records.go Normal file
View File

@ -0,0 +1,46 @@
package data
import (
"encoding/json"
"ketotrack/model"
"os"
)
// Record holds a pointer to a Reading or Note.
type Record struct {
Reading *model.Reading `json:"reading,omitempty"`
Note *model.Note `json:"note,omitempty"`
}
// AppContext is the application data store that holds Records
type AppContext struct {
Records []Record
}
// LoadRecords will load records from file
func (ctx *AppContext) LoadRecords(filename string) error {
data, err := os.ReadFile(filename)
if err != nil {
return err
}
return json.Unmarshal(data, &ctx.Records)
}
// SaveRecords will save records to a file
func (ctx *AppContext) SaveRecords(filename string) error {
jsonData, err := json.Marshal(ctx.Records)
if err != nil {
return err
}
return os.WriteFile(filename, jsonData, 0660)
}
// AddReading will add a Reading to the AppContext
func (ctx *AppContext) AddReading(reading model.Reading) {
ctx.Records = append(ctx.Records, Record{Reading: &reading})
}
// AddNote will a add a Note to the AppContext
func (ctx *AppContext) AddNote(note model.Note) {
ctx.Records = append(ctx.Records, Record{Note: &note})
}