This commit is contained in:
+31
-13
@@ -19,19 +19,24 @@ type SpeciesModelInterface interface {
|
||||
|
||||
// Species contains reusable botanical and cultivation master data.
|
||||
type Species struct {
|
||||
ID int `json:"id"`
|
||||
GardenID *int `json:"garden_id,omitempty"`
|
||||
CommonName string `json:"common_name"`
|
||||
Cultivar string `json:"cultivar"`
|
||||
BotanicalName string `json:"botanical_name"`
|
||||
CategoryID *int `json:"category_id,omitempty"`
|
||||
Category string `json:"category"`
|
||||
SunExposure *string `json:"sun_exposure,omitempty"`
|
||||
SoilCondition *string `json:"soil_condition,omitempty"`
|
||||
SoilReaction *string `json:"soil_reaction,omitempty"`
|
||||
WinterProtection *string `json:"winter_protection,omitempty"`
|
||||
SpacingCM *int `json:"spacing_cm,omitempty"`
|
||||
ID int `json:"id"`
|
||||
GardenID *int `json:"garden_id,omitempty"`
|
||||
CommonName string `json:"common_name"`
|
||||
Cultivar string `json:"cultivar"`
|
||||
BotanicalName string `json:"botanical_name"`
|
||||
CategoryID *int `json:"category_id,omitempty"`
|
||||
Category string `json:"category"`
|
||||
SunExposure *string `json:"sun_exposure,omitempty"`
|
||||
SoilCondition *string `json:"soil_condition,omitempty"`
|
||||
SoilReaction *string `json:"soil_reaction,omitempty"`
|
||||
WinterProtection *string `json:"winter_protection,omitempty"`
|
||||
SpacingCM *int `json:"spacing_cm,omitempty"`
|
||||
// HeightCM is retained as a deprecated API alias for HeightCMTo.
|
||||
HeightCM *int `json:"height_cm,omitempty"`
|
||||
HeightCMFrom *int `json:"height_cm_from,omitempty"`
|
||||
HeightCMTo *int `json:"height_cm_to,omitempty"`
|
||||
WidthCMFrom *int `json:"width_cm_from,omitempty"`
|
||||
WidthCMTo *int `json:"width_cm_to,omitempty"`
|
||||
SowMonthFrom *int `json:"sow_month_from,omitempty"`
|
||||
SowDayFrom *int `json:"sow_day_from,omitempty"`
|
||||
SowMonthTo *int `json:"sow_month_to,omitempty"`
|
||||
@@ -72,7 +77,12 @@ func ValidateSpecies(v *validate.Validator, species Species) {
|
||||
validateOptionalEnum(v, "soil_condition", species.SoilCondition, "dry", "moist", "boggy")
|
||||
validateOptionalEnum(v, "soil_reaction", species.SoilReaction, "alkaline", "acidic", "neutral")
|
||||
validateOptionalPositive(v, "spacing_cm", species.SpacingCM)
|
||||
validateOptionalPositive(v, "height_cm", species.HeightCM)
|
||||
heightTo := species.HeightCMTo
|
||||
if heightTo == nil {
|
||||
heightTo = species.HeightCM
|
||||
}
|
||||
validateOptionalRange(v, "height_cm", species.HeightCMFrom, heightTo)
|
||||
validateOptionalRange(v, "width_cm", species.WidthCMFrom, species.WidthCMTo)
|
||||
validateOptionalCalendarPart(v, "sow_month_from", species.SowMonthFrom, 12)
|
||||
validateOptionalCalendarPart(v, "sow_day_from", species.SowDayFrom, 31)
|
||||
validateOptionalCalendarPart(v, "sow_month_to", species.SowMonthTo, 12)
|
||||
@@ -99,6 +109,14 @@ func validateOptionalPositive(v *validate.Validator, field string, value *int) {
|
||||
}
|
||||
}
|
||||
|
||||
func validateOptionalRange(v *validate.Validator, field string, from, to *int) {
|
||||
validateOptionalPositive(v, field+"_from", from)
|
||||
validateOptionalPositive(v, field+"_to", to)
|
||||
if from != nil && to != nil {
|
||||
v.Check(*from <= *to, field+"_from", "must not be greater than "+field+"_to")
|
||||
}
|
||||
}
|
||||
|
||||
func validateOptionalCalendarPart(v *validate.Validator, field string, value *int, maximum int) {
|
||||
if value != nil {
|
||||
v.Check(*value >= 1 && *value <= maximum, field, "is outside the valid range")
|
||||
|
||||
Reference in New Issue
Block a user