155 lines
2.5 KiB
Go
155 lines
2.5 KiB
Go
package models
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type SettingGroup struct {
|
|
id int
|
|
description string
|
|
}
|
|
|
|
func (g *SettingGroup) Id() int {
|
|
return g.id
|
|
}
|
|
|
|
func (g *SettingGroup) Description() string {
|
|
return g.description
|
|
}
|
|
|
|
const (
|
|
SETTING_GROUP_USER = "user"
|
|
SETTING_GROUP_GUESTBOOK = "guestbook"
|
|
)
|
|
|
|
type SettingDataType struct {
|
|
id int
|
|
description string
|
|
}
|
|
|
|
func (d *SettingDataType) Id() int {
|
|
return d.id
|
|
}
|
|
|
|
func (d *SettingDataType) Description() string {
|
|
return d.description
|
|
}
|
|
|
|
const (
|
|
SETTING_TYPE_INTEGER = "integer"
|
|
SETTING_TYPE_STRING = "alphanumeric"
|
|
SETTING_TYPE_DATE = "datetime"
|
|
)
|
|
|
|
type Setting struct {
|
|
id int
|
|
description string
|
|
constrained bool
|
|
dataType SettingDataType
|
|
settingGroup SettingGroup
|
|
minValue string
|
|
maxValue string
|
|
}
|
|
|
|
func (s *Setting) Id() int {
|
|
return s.id
|
|
}
|
|
|
|
func (s *Setting) Description() string {
|
|
return s.description
|
|
}
|
|
|
|
func (s *Setting) Constrained() bool {
|
|
return s.constrained
|
|
}
|
|
|
|
func (s *Setting) DataType() SettingDataType {
|
|
return s.dataType
|
|
}
|
|
|
|
func (s *Setting) SettingGroup() SettingGroup {
|
|
return s.settingGroup
|
|
}
|
|
|
|
func (s *Setting) MinValue() string {
|
|
return s.minValue
|
|
}
|
|
|
|
func (s *Setting) MaxValue() string {
|
|
return s.maxValue
|
|
}
|
|
|
|
func (s *Setting) Validate(value string) bool {
|
|
switch s.dataType.description {
|
|
case SETTING_TYPE_INTEGER:
|
|
return s.validateInt(value)
|
|
case SETTING_TYPE_STRING:
|
|
return s.validateAlphanum(value)
|
|
case SETTING_TYPE_DATE:
|
|
return s.validateDatetime(value)
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (s *Setting) validateInt(value string) bool {
|
|
v, err := strconv.ParseInt(value, 10, 0)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
var min int64
|
|
var max int64
|
|
if len(s.minValue) > 0 {
|
|
min, err = strconv.ParseInt(s.minValue, 10, 0)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if v < min {
|
|
return false
|
|
}
|
|
}
|
|
if len(s.maxValue) > 0 {
|
|
max, err = strconv.ParseInt(s.maxValue, 10, 0)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if v < max {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (s *Setting) validateDatetime(value string) bool {
|
|
v, err := time.Parse(time.RFC3339, value)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
var min time.Time
|
|
var max time.Time
|
|
|
|
if len(s.minValue) > 0 {
|
|
min, err = time.Parse(time.RFC3339, s.minValue)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if v.Before(min) {
|
|
return false
|
|
}
|
|
}
|
|
if len(s.maxValue) > 0 {
|
|
max, err = time.Parse(time.RFC3339, s.maxValue)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if v.After(max) {
|
|
return false
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (s *Setting) validateAlphanum(value string) bool {
|
|
return len(value) >= 0
|
|
}
|