mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-01-27 23:46:18 +02:00
116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
package search
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/pocketbase/pocketbase/tools/types"
|
|
)
|
|
|
|
// note: used primarily for the tests
|
|
var timeNow = func() time.Time {
|
|
return time.Now()
|
|
}
|
|
|
|
var identifierMacros = map[string]func() (any, error){
|
|
"@now": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
|
|
d, err := types.ParseDateTime(today)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@now: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@second": func() (any, error) {
|
|
return int(timeNow().UTC().Second()), nil
|
|
},
|
|
"@minute": func() (any, error) {
|
|
return int(timeNow().UTC().Minute()), nil
|
|
},
|
|
"@hour": func() (any, error) {
|
|
return int(timeNow().UTC().Hour()), nil
|
|
},
|
|
"@day": func() (any, error) {
|
|
return int(timeNow().UTC().Day()), nil
|
|
},
|
|
"@month": func() (any, error) {
|
|
return int(timeNow().UTC().Month()), nil
|
|
},
|
|
"@weekday": func() (any, error) {
|
|
return int(timeNow().UTC().Weekday()), nil
|
|
},
|
|
"@year": func() (any, error) {
|
|
return int(timeNow().UTC().Year()), nil
|
|
},
|
|
"@todayStart": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
start := time.Date(today.Year(), today.Month(), today.Day(), 0, 0, 0, 0, time.UTC)
|
|
|
|
d, err := types.ParseDateTime(start)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@todayStart: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@todayEnd": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
|
|
start := time.Date(today.Year(), today.Month(), today.Day(), 23, 59, 59, 999999999, time.UTC)
|
|
|
|
d, err := types.ParseDateTime(start)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@todayEnd: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@monthStart": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
start := time.Date(today.Year(), today.Month(), 1, 0, 0, 0, 0, time.UTC)
|
|
|
|
d, err := types.ParseDateTime(start)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@monthStart: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@monthEnd": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
start := time.Date(today.Year(), today.Month(), 1, 23, 59, 59, 999999999, time.UTC)
|
|
end := start.AddDate(0, 1, -1)
|
|
|
|
d, err := types.ParseDateTime(end)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@monthEnd: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@yearStart": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
start := time.Date(today.Year(), 1, 1, 0, 0, 0, 0, time.UTC)
|
|
|
|
d, err := types.ParseDateTime(start)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@yearStart: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
"@yearEnd": func() (any, error) {
|
|
today := timeNow().UTC()
|
|
end := time.Date(today.Year(), 12, 31, 23, 59, 59, 999999999, time.UTC)
|
|
|
|
d, err := types.ParseDateTime(end)
|
|
if err != nil {
|
|
return "", fmt.Errorf("@yearEnd: %w", err)
|
|
}
|
|
|
|
return d.String(), nil
|
|
},
|
|
}
|