updates
This commit is contained in:
86
server/internal/service/daily_overview_service.go
Normal file
86
server/internal/service/daily_overview_service.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"go-server/internal/repository"
|
||||
)
|
||||
|
||||
type DailyOverviewService struct {
|
||||
dailyRepo *repository.DailyOverviewRepository
|
||||
}
|
||||
|
||||
func NewDailyOverviewService(dailyRepo *repository.DailyOverviewRepository) *DailyOverviewService {
|
||||
return &DailyOverviewService{
|
||||
dailyRepo: dailyRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// DailyNutrientSummary represents the complete daily overview
|
||||
type DailyNutrientSummary struct {
|
||||
NutrientTotals []repository.NutrientTotal `json:"nutrientTotals"`
|
||||
ByCategory map[string][]repository.NutrientTotal `json:"byCategory"`
|
||||
SupplementBreakdown []repository.SupplementNutrientDetails `json:"supplementBreakdown"`
|
||||
Summary DailySummaryStats `json:"summary"`
|
||||
}
|
||||
|
||||
type DailySummaryStats struct {
|
||||
TotalNutrients int `json:"totalNutrients"`
|
||||
TotalSupplements int `json:"totalSupplements"`
|
||||
CategoriesCount int `json:"categoriesCount"`
|
||||
}
|
||||
|
||||
// GetDailyOverview returns a comprehensive overview of daily nutrient intake
|
||||
func (s *DailyOverviewService) GetDailyOverview(ctx context.Context) (*DailyNutrientSummary, error) {
|
||||
// Get nutrient totals
|
||||
totals, err := s.dailyRepo.GetNutrientTotals(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get breakdown by category
|
||||
byCategory, err := s.dailyRepo.GetNutrientsByCategory(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get supplement breakdown
|
||||
breakdown, err := s.dailyRepo.GetSupplementBreakdown(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Calculate summary stats
|
||||
supplementMap := make(map[string]bool)
|
||||
for _, item := range breakdown {
|
||||
supplementMap[item.SupplementName] = true
|
||||
}
|
||||
|
||||
summary := DailySummaryStats{
|
||||
TotalNutrients: len(totals),
|
||||
TotalSupplements: len(supplementMap),
|
||||
CategoriesCount: len(byCategory),
|
||||
}
|
||||
|
||||
return &DailyNutrientSummary{
|
||||
NutrientTotals: totals,
|
||||
ByCategory: byCategory,
|
||||
SupplementBreakdown: breakdown,
|
||||
Summary: summary,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetNutrientTotals returns just the aggregated totals
|
||||
func (s *DailyOverviewService) GetNutrientTotals(ctx context.Context) ([]repository.NutrientTotal, error) {
|
||||
return s.dailyRepo.GetNutrientTotals(ctx)
|
||||
}
|
||||
|
||||
// GetSupplementBreakdown returns detailed breakdown by supplement
|
||||
func (s *DailyOverviewService) GetSupplementBreakdown(ctx context.Context) ([]repository.SupplementNutrientDetails, error) {
|
||||
return s.dailyRepo.GetSupplementBreakdown(ctx)
|
||||
}
|
||||
|
||||
// ExecuteCustomQuery allows executing custom SQL queries
|
||||
// This gives you maximum flexibility for complex analytics
|
||||
func (s *DailyOverviewService) ExecuteCustomQuery(ctx context.Context, query string, args ...interface{}) ([]map[string]interface{}, error) {
|
||||
return s.dailyRepo.ExecuteRawQueryWithResult(ctx, query, args...)
|
||||
}
|
||||
Reference in New Issue
Block a user