From a72b2ef17f3d42eb3e4f42dc604f65736b61abac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franc=C3=A9=20Wilke?= <francewilke@gmail.com> Date: Wed, 26 Feb 2025 09:48:02 +0200 Subject: [PATCH] Add ParseAbsoluteQuery --- db_utils/db_utils.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/db_utils/db_utils.go b/db_utils/db_utils.go index a8e6bdb..5bef004 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"` -- GitLab