From c40e5f0a7452b3612ee28117a82af4a8a54f5728 Mon Sep 17 00:00:00 2001 From: "daniel.naude" <danieln@bob.co.za> Date: Thu, 16 May 2024 13:51:04 +0200 Subject: [PATCH] Refactor TradingHours to allow for closed days where trading does not take place --- date_utils/date_utils.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/date_utils/date_utils.go b/date_utils/date_utils.go index 76f4dfc..68be30f 100644 --- a/date_utils/date_utils.go +++ b/date_utils/date_utils.go @@ -289,6 +289,11 @@ func (t TradingHours) Validate() error { } for _, day := range t { + if day.StartTime == "" || day.EndTime == "" { + // Allow empty trading hours for a day to represent closed + continue + } + if !TimeBefore(day.StartTime, day.EndTime) { return errors.Error("Start time must be before end time") } @@ -336,19 +341,25 @@ func (t TradingHours) String() string { rangeStartIndex := 1 for i := 1; i < len(t); i++ { - startTime, err := time.Parse("15:04", t[i].StartTime) - if err != nil { - return "" - } + var times string - endTime, err := time.Parse("15:04", t[i].EndTime) - if err != nil { - return "" - } + if t[i].StartTime != "" && t[i].EndTime != "" { + startTime, err := time.Parse("15:04", t[i].StartTime) + if err != nil { + return "" + } + + endTime, err := time.Parse("15:04", t[i].EndTime) + if err != nil { + return "" + } - times := startTime.Format("3:04pm") + "-" + endTime.Format("3:04pm") - if t[i].StartTime == "00:00" && t[i].EndTime == "23:59" { - times = "All day" + times = startTime.Format("3:04pm") + "-" + endTime.Format("3:04pm") + if t[i].StartTime == "00:00" && t[i].EndTime == "23:59" { + times = "All day" + } + } else { + times = "Closed" } // If we're at the last element or the next day doesn't have the same times, we end the current range -- GitLab