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