Support species height and width ranges
CI / test (push) Failing after 3m6s

This commit is contained in:
2026-09-16 20:21:41 +02:00
parent 87809b2344
commit ef608551ad
14 changed files with 271 additions and 69 deletions
+25 -14
View File
@@ -22,7 +22,10 @@ type speciesForm struct {
SoilReaction string `form:"soil_reaction"`
WinterProtection string `form:"winter_protection"`
SpacingCM int `form:"spacing_cm"`
HeightCM int `form:"height_cm"`
HeightCMFrom int `form:"height_cm_from"`
HeightCMTo int `form:"height_cm_to"`
WidthCMFrom int `form:"width_cm_from"`
WidthCMTo int `form:"width_cm_to"`
Notes string `form:"notes"`
ImageData string `form:"image_data"`
ImageID int `form:"image_id"`
@@ -133,7 +136,13 @@ func speciesFormFromSpecies(value client.Species) speciesForm {
form.WinterProtection = *value.WinterProtection
}
copyOptionalInt(value.SpacingCM, &form.SpacingCM)
copyOptionalInt(value.HeightCM, &form.HeightCM)
copyOptionalInt(value.HeightCMFrom, &form.HeightCMFrom)
copyOptionalInt(value.HeightCMTo, &form.HeightCMTo)
if value.HeightCMTo == nil {
copyOptionalInt(value.HeightCM, &form.HeightCMTo)
}
copyOptionalInt(value.WidthCMFrom, &form.WidthCMFrom)
copyOptionalInt(value.WidthCMTo, &form.WidthCMTo)
copyOptionalInt(value.CategoryID, &form.CategoryID)
copyOptionalInt(value.SowMonthFrom, &form.SowMonthFrom)
copyOptionalInt(value.SowDayFrom, &form.SowDayFrom)
@@ -219,9 +228,10 @@ func speciesInput(form speciesForm) client.SpeciesInput {
if form.SpacingCM > 0 {
input.SpacingCM = &form.SpacingCM
}
if form.HeightCM > 0 {
input.HeightCM = &form.HeightCM
}
input.HeightCMFrom, input.HeightCMTo = optionalPositive(form.HeightCMFrom), optionalPositive(form.HeightCMTo)
input.WidthCMFrom, input.WidthCMTo = optionalPositive(form.WidthCMFrom), optionalPositive(form.WidthCMTo)
input.ClearHeightCMFrom, input.ClearHeightCMTo = form.HeightCMFrom == 0, form.HeightCMTo == 0
input.ClearWidthCMFrom, input.ClearWidthCMTo = form.WidthCMFrom == 0, form.WidthCMTo == 0
if json.Valid([]byte(form.Attributes)) {
input.Attributes = json.RawMessage(form.Attributes)
}
@@ -230,18 +240,12 @@ func speciesInput(form speciesForm) client.SpeciesInput {
} else {
input.ClearCategoryID = true
}
assignPositive := func(value int) *int {
if value > 0 {
return &value
}
return nil
}
form.SowMonthTo, form.SowDayTo = rangeEnd(form.SowMonthFrom, form.SowDayFrom, form.SowDuration, form.SowDurationUnit)
form.PlantingMonthTo, form.PlantingDayTo = rangeEnd(form.PlantingMonthFrom, form.PlantingDayFrom, form.PlantingDuration, form.PlantingDurationUnit)
form.HarvestMonthTo, form.HarvestDayTo = rangeEnd(form.HarvestMonthFrom, form.HarvestDayFrom, form.HarvestDuration, form.HarvestDurationUnit)
input.SowMonthFrom, input.SowDayFrom, input.SowMonthTo, input.SowDayTo = assignPositive(form.SowMonthFrom), assignPositive(form.SowDayFrom), assignPositive(form.SowMonthTo), assignPositive(form.SowDayTo)
input.PlantingMonthFrom, input.PlantingDayFrom, input.PlantingMonthTo, input.PlantingDayTo = assignPositive(form.PlantingMonthFrom), assignPositive(form.PlantingDayFrom), assignPositive(form.PlantingMonthTo), assignPositive(form.PlantingDayTo)
input.HarvestMonthFrom, input.HarvestDayFrom, input.HarvestMonthTo, input.HarvestDayTo = assignPositive(form.HarvestMonthFrom), assignPositive(form.HarvestDayFrom), assignPositive(form.HarvestMonthTo), assignPositive(form.HarvestDayTo)
input.SowMonthFrom, input.SowDayFrom, input.SowMonthTo, input.SowDayTo = optionalPositive(form.SowMonthFrom), optionalPositive(form.SowDayFrom), optionalPositive(form.SowMonthTo), optionalPositive(form.SowDayTo)
input.PlantingMonthFrom, input.PlantingDayFrom, input.PlantingMonthTo, input.PlantingDayTo = optionalPositive(form.PlantingMonthFrom), optionalPositive(form.PlantingDayFrom), optionalPositive(form.PlantingMonthTo), optionalPositive(form.PlantingDayTo)
input.HarvestMonthFrom, input.HarvestDayFrom, input.HarvestMonthTo, input.HarvestDayTo = optionalPositive(form.HarvestMonthFrom), optionalPositive(form.HarvestDayFrom), optionalPositive(form.HarvestMonthTo), optionalPositive(form.HarvestDayTo)
input.ClearSowRange = form.SowMonthFrom == 0 && form.SowMonthTo == 0
input.ClearPlantingRange = form.PlantingMonthFrom == 0 && form.PlantingMonthTo == 0
input.ClearHarvestRange = form.HarvestMonthFrom == 0 && form.HarvestMonthTo == 0
@@ -251,6 +255,13 @@ func speciesInput(form speciesForm) client.SpeciesInput {
return input
}
func optionalPositive(value int) *int {
if value > 0 {
return &value
}
return nil
}
func rangeEnd(month, day, duration int, unit string) (int, int) {
if month < 1 {
return 0, 0