@@ -0,0 +1,36 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gardomatic.kleiax.de/internal/platform/validate"
|
||||
)
|
||||
|
||||
// ApplicationSettings contains application-wide automation settings.
|
||||
type ApplicationSettings struct {
|
||||
LifecycleStatusEnabled bool `json:"lifecycle_status_enabled"`
|
||||
LifecycleRemovalMonth int `json:"lifecycle_removal_month"`
|
||||
LifecycleRemovalDay int `json:"lifecycle_removal_day"`
|
||||
Timezone string `json:"timezone"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Version int `json:"version"`
|
||||
}
|
||||
|
||||
// ApplicationSettingsModelInterface persists global settings and applies lifecycle cleanup atomically.
|
||||
type ApplicationSettingsModelInterface interface {
|
||||
Get() (ApplicationSettings, error)
|
||||
Update(settings ApplicationSettings) (ApplicationSettings, error)
|
||||
RemoveExpiredPlants(asOf time.Time, removalMonth, removalDay int) (int, error)
|
||||
}
|
||||
|
||||
// ValidateApplicationSettings validates global automation configuration.
|
||||
func ValidateApplicationSettings(v *validate.Validator, settings ApplicationSettings) {
|
||||
v.Check(settings.LifecycleRemovalMonth >= 1 && settings.LifecycleRemovalMonth <= 12, "lifecycle_removal_month", "must be between 1 and 12")
|
||||
v.Check(settings.LifecycleRemovalDay >= 1 && settings.LifecycleRemovalDay <= 31, "lifecycle_removal_day", "must be between 1 and 31")
|
||||
v.Check(strings.TrimSpace(settings.Timezone) != "", "timezone", "must be provided")
|
||||
if strings.TrimSpace(settings.Timezone) != "" {
|
||||
_, err := time.LoadLocation(settings.Timezone)
|
||||
v.Check(err == nil, "timezone", "must be a valid IANA timezone")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user