Add daily weekly monthly and yearly view for food

This commit is contained in:
2024-08-09 16:31:00 +02:00
parent 66a6cb69d6
commit 7683ccd5e1
2 changed files with 132 additions and 3 deletions

View File

@@ -36,7 +36,11 @@ func (s *FoodService) GetRecent() ([]Food, error) {
return res, fmt.Errorf("cannot get recent food, db is nil or is not ready")
}
row, _ := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodView WHERE date > datetime('now', '-%s days')", foodColumns, Settings.FoodDaysLookback))
row, err := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodView WHERE date > datetime('now', '-%d days')", foodColumns, Settings.FoodDaysLookback))
if err != nil {
log.Printf("error getting daily food: %v", err)
return res, err
}
var rows []Food
for row.Next() {
@@ -100,5 +104,123 @@ func (s *FoodService) GetByRowid(rowid int64) (Food, error) {
return res, fmt.Errorf("error scanning row: %v", err)
}
return res, nil
}
// I could probably refactor this to be less of a disaster...
// But I think it'll work for now
func (s *FoodService) GetDaily() ([]AggregatedFood, error) {
var res []AggregatedFood
if s.db == nil || !s.db.Ready {
return res, fmt.Errorf("cannot get daily food, db is nil or is not ready")
}
row, err := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodDaily LIMIT %d", foodAggregatedColumns, Settings.FoodDailyLookback))
if err != nil {
log.Printf("error getting daily food: %v", err)
return res, err
}
var rows []AggregatedFood
for row.Next() {
var food AggregatedFood
err := row.Scan(&food.period, &food.amount, &food.avgPer100, &food.energy)
if err != nil {
log.Printf("error scanning row: %v", err)
continue
}
rows = append(rows, food)
}
log.Printf("%++v", rows)
return res, nil
}
func (s *FoodService) GetWeekly() ([]AggregatedFood, error) {
var res []AggregatedFood
if s.db == nil || !s.db.Ready {
return res, fmt.Errorf("cannot get weekly food, db is nil or is not ready")
}
row, err := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodWeekly LIMIT %d", foodAggregatedColumns, Settings.FoodWeeklyLookback))
if err != nil {
log.Printf("error getting weekly food: %v", err)
return res, err
}
var rows []AggregatedFood
for row.Next() {
var food AggregatedFood
err := row.Scan(&food.period, &food.amount, &food.avgPer100, &food.energy)
if err != nil {
log.Printf("error scanning row: %v", err)
continue
}
rows = append(rows, food)
}
log.Printf("%++v", rows)
return res, nil
}
func (s *FoodService) GetMonthly() ([]AggregatedFood, error) {
var res []AggregatedFood
if s.db == nil || !s.db.Ready {
return res, fmt.Errorf("cannot get monthly food, db is nil or is not ready")
}
row, err := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodMonthly LIMIT %d", foodAggregatedColumns, Settings.FoodMonthlyLookback))
if err != nil {
log.Printf("error getting monthly food: %v", err)
return res, err
}
var rows []AggregatedFood
for row.Next() {
var food AggregatedFood
err := row.Scan(&food.period, &food.amount, &food.avgPer100, &food.energy)
if err != nil {
log.Printf("error scanning row: %v", err)
continue
}
rows = append(rows, food)
}
log.Printf("%++v", rows)
return res, nil
}
func (s *FoodService) GetYearly() ([]AggregatedFood, error) {
var res []AggregatedFood
if s.db == nil || !s.db.Ready {
return res, fmt.Errorf("cannot get yearly food, db is nil or is not ready")
}
row, err := s.db.readConn.Query(fmt.Sprintf("SELECT %s from foodYearly LIMIT %d", foodAggregatedColumns, Settings.FoodYearlyLookback))
if err != nil {
log.Printf("error getting daily yearly: %v", err)
return res, err
}
var rows []AggregatedFood
for row.Next() {
var food AggregatedFood
err := row.Scan(&food.period, &food.amount, &food.avgPer100, &food.energy)
if err != nil {
log.Printf("error scanning row: %v", err)
continue
}
rows = append(rows, food)
}
log.Printf("%++v", rows)
return res, nil
}

11
main.go
View File

@@ -63,12 +63,19 @@ func main() {
// os.Exit(1)
// }
food, err := foodService.Create(Food{food: "test", amount: 1})
// food, err := foodService.Create(Food{food: "test", amount: 1})
// if err != nil {
// Error.Printf("%++v", err)
// os.Exit(1)
// }
// log.Println(food)
daily, err := foodService.GetDaily()
if err != nil {
Error.Printf("%++v", err)
os.Exit(1)
}
log.Println(food)
log.Println(daily)
log.Println("done")
wg.Wait()