package analytic import ( "errors" "net/http" "strings" "imuslab.com/zoraxy/mod/database" "imuslab.com/zoraxy/mod/statistic" "imuslab.com/zoraxy/mod/utils" ) type DataLoader struct { Database *database.Database StatisticCollector *statistic.Collector } // Create a new data loader for loading statistic from database func NewDataLoader(db *database.Database, sc *statistic.Collector) *DataLoader { return &DataLoader{ Database: db, StatisticCollector: sc, } } // GetAllStatisticSummaryInRange return all the statisics within the time frame. The second array is the key (dates) of the statistic func (d *DataLoader) GetAllStatisticSummaryInRange(start, end string) ([]*statistic.DailySummaryExport, []string, error) { dailySummaries := []*statistic.DailySummaryExport{} collectedDates := []string{} //Generate all the dates in between the range keys, err := generateDateRange(start, end) if err != nil { return dailySummaries, collectedDates, err } //Load all the data from database for _, key := range keys { thisStat := statistic.DailySummaryExport{} err = d.Database.Read("stats", key, &thisStat) if err == nil { dailySummaries = append(dailySummaries, &thisStat) collectedDates = append(collectedDates, key) } } return dailySummaries, collectedDates, nil } func (d *DataLoader) GetStartAndEndDatesFromRequest(r *http.Request) (string, string, error) { // Get the start date from POST para start, err := utils.GetPara(r, "start") if err != nil { return "", "", errors.New("start date cannot be empty") } if strings.Contains(start, "-") { //Must be underscore start = strings.ReplaceAll(start, "-", "_") } // Get end date from POST para end, err := utils.GetPara(r, "end") if err != nil { return "", "", errors.New("end date cannot be empty") } if strings.Contains(end, "-") { //Must be underscore end = strings.ReplaceAll(end, "-", "_") } return start, end, nil }