diff --git a/db_utils/db_utils.go b/db_utils/db_utils.go index a8e6bdb5431ca3cb6cb828b8b4fd324f845f2a8d..5bef00400f8d56d53c259dfe3560860e3623a11c 100644 --- a/db_utils/db_utils.go +++ b/db_utils/db_utils.go @@ -134,6 +134,39 @@ func AbsoluteDateStringQuery(absolute string) (string, error) { return "", errors.Error("invalid absolute date query") } +func ParseAbsoluteQuery(absoluteQuery string, location *time.Location) (startDate, endDate time.Time, err error) { + nowValue := time.Now().UTC() + var value int64 + + switch { + case CheckAbsoluteRegex(Yesterday, absoluteQuery): + yesterday := nowValue.AddDate(0, 0, -1) + startDate = time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 0, 0, 0, 0, location) + endDate = time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 23, 59, 59, 999999999, location) + case CheckAbsoluteRegex(LastXHours, absoluteQuery): + value = PullAbsoluteValue(absoluteQuery) + since := nowValue.Add(time.Duration(-value) * time.Hour) + startDate = time.Date(since.Year(), since.Month(), since.Day(), since.Hour(), since.Minute(), since.Second(), since.Nanosecond(), location) + endDate = time.Date(nowValue.Year(), nowValue.Month(), nowValue.Day(), 23, 59, 59, 999999999, location) + case CheckAbsoluteRegex(LastDay, absoluteQuery): + startDate = time.Date(nowValue.Year(), nowValue.Month(), nowValue.Day(), 0, 0, 0, 0, location) + endDate = time.Date(nowValue.Year(), nowValue.Month(), nowValue.Day(), 23, 59, 59, 999999999, location) + case CheckAbsoluteRegex(LastXDays, absoluteQuery): + value = PullAbsoluteValue(absoluteQuery) + since := nowValue.AddDate(0, 0, -int(value)).Truncate(24 * time.Hour) + startDate = time.Date(since.Year(), since.Month(), since.Day(), since.Hour(), since.Minute(), since.Second(), since.Nanosecond(), location) + endDate = time.Date(nowValue.Year(), nowValue.Month(), nowValue.Day(), 23, 59, 59, 999999999, location) + case CheckAbsoluteRegex(LastMonth, absoluteQuery): + startDate = time.Date(nowValue.Year(), nowValue.Month(), 1, 0, 0, 0, 0, location) + lastDay := startDate.AddDate(0, 1, -1) + endDate = time.Date(lastDay.Year(), lastDay.Month(), lastDay.Day(), 23, 59, 59, 999999999, location) + default: + return startDate, endDate, errors.Error("invalid absolute date query") + } + + return startDate, endDate, nil +} + type PageAndOrderParams struct { PageParams OrderBy string `json:"order_by,omitempty"`