diff options
author | Dmitry Samuylov <dsamuylov@pharo.com> | 2018-08-28 13:09:32 -0400 |
---|---|---|
committer | Harrison Healey <harrisonmhealey@gmail.com> | 2018-08-28 13:09:32 -0400 |
commit | 42806ae965b861955235698f247df862fd655d09 (patch) | |
tree | 4a92f098976b089dc832f3f0dc5ecfc0392690ed /model/utils.go | |
parent | 61e27beabc9804fdcf59ed9df2180802175a4f70 (diff) | |
download | chat-42806ae965b861955235698f247df862fd655d09.tar.gz chat-42806ae965b861955235698f247df862fd655d09.tar.bz2 chat-42806ae965b861955235698f247df862fd655d09.zip |
Feature/search after before on (#9219)
* initial implementation of after, before, on search flags allowing to restrict the search to a specific day or a date range
* missed setting beforeDate in SearchParams in one place
* fixed condition when only flags are used for search without any plain terms
* changed date format used for after/before/on flags to be in ISO8601 format as suggested in PR comments, added a helper function to pad month and day with zeroes allowing the user user either format, with or without leading zeroes
* corrected expected compare to date setting for the TestParseDateFilterToTimeISO8601 test
* fixed a bug for the scenario when you only have the date flags without any terms, added a couple of tests for that scenario
* updated the date filter logic to use parameters to construct the query instead of simply appending strings together, as suggested in the pull request comments
* added search unit test using date flags
* added a helper function to create a test post with a createat date manually set, updated the test for search using date flags to create test posts with different createat dates to be able to better test the functionality
* MM-11817 Add support for after/before/on search flags with Elasticsearch
* add support to search posts to perform the search in context of the client's timezone when filtering by createat date using on: after: before: flags
* updated tests to match the new signature
Diffstat (limited to 'model/utils.go')
-rw-r--r-- | model/utils.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/model/utils.go b/model/utils.go index 574f43e06..7002070d7 100644 --- a/model/utils.go +++ b/model/utils.go @@ -148,6 +148,46 @@ func GetMillis() int64 { return time.Now().UnixNano() / int64(time.Millisecond) } +// GetMillisForTime is a convience method to get milliseconds since epoch for provided Time. +func GetMillisForTime(thisTime time.Time) int64 { + return thisTime.UnixNano() / int64(time.Millisecond) +} + +// ParseDateFilterToTime is a convience method to get Time from string +func ParseDateFilterToTime(filterString string) time.Time { + resultTime, err := time.Parse("2006-01-02", PadDateStringZeros(filterString)) + if err != nil { + return time.Now() + } + return resultTime +} + +// PadDateStringZeros is a convience method to pad 2 digit date parts with zeros to meet ISO 8601 format +func PadDateStringZeros(dateString string) string { + parts := strings.Split(dateString, "-") + for index, part := range parts { + if len(part) == 1 { + parts[index] = "0" + part + } + } + dateString = strings.Join(parts[:], "-") + return dateString +} + +// GetStartOfDayMillis is a convience method to get milliseconds since epoch for provided date's start of day +func GetStartOfDayMillis(thisTime time.Time, timeZoneOffset int) int64 { + localSearchTimeZone := time.FixedZone("Local Search Time Zone", timeZoneOffset) + resultTime := time.Date(thisTime.Year(), thisTime.Month(), thisTime.Day(), 0, 0, 0, 0, localSearchTimeZone) + return GetMillisForTime(resultTime) +} + +// GetEndOfDayMillis is a convience method to get milliseconds since epoch for provided date's end of day +func GetEndOfDayMillis(thisTime time.Time, timeZoneOffset int) int64 { + localSearchTimeZone := time.FixedZone("Local Search Time Zone", timeZoneOffset) + resultTime := time.Date(thisTime.Year(), thisTime.Month(), thisTime.Day(), 23, 59, 59, 999999999, localSearchTimeZone) + return GetMillisForTime(resultTime) +} + func CopyStringMap(originalMap map[string]string) map[string]string { copyMap := make(map[string]string) for k, v := range originalMap { |