diff --git a/controllers/gdd_controller.go b/controllers/gdd_controller.go index d482652ef7de9dc792c12941332b3b472e3e330e..4d209ff98a4d59ccf743226b9d9b4f943c7a41bb 100644 --- a/controllers/gdd_controller.go +++ b/controllers/gdd_controller.go @@ -46,6 +46,6 @@ func GetDailyGdd(c *fiber.Ctx) error { // @Param accumulate query boolean true "Accumulate gdd values" // @Router /gdd/normals [get] func GetNormalGdd(c *fiber.Ctx) error { - request := models.BuildGddRequest(c) + request := models.BuildYearlessGddRequest(c) return c.Status(fiber.StatusOK).JSON(services.GetNormalValues(request)) } diff --git a/controllers/nomads_controller.go b/controllers/nomads_controller.go index e79592543d4d4d5684a9580feb3f3e8213a093f4..c9f83002b3da0b64e259ffe8e118369500d4fc04 100644 --- a/controllers/nomads_controller.go +++ b/controllers/nomads_controller.go @@ -23,7 +23,7 @@ import ( // @Param accumulate query boolean true "Accumulate gdd values" // @Router /gdd/gefs [get] func GetGefsGDD(c *fiber.Ctx) error { - request := models.BuildGddRequest(c) + request := models.BuildYearlessGddRequest(c) return c.Status(fiber.StatusOK).JSON(services.GetGefsGddValues(request)) } @@ -41,7 +41,7 @@ func GetGefsGDD(c *fiber.Ctx) error { // @Param accumulate query boolean true "Accumulate gdd values" // @Router /gdd/cfs [get] func GetCfsGDD(c *fiber.Ctx) error { - request := models.BuildGddRequest(c) + request := models.BuildYearlessGddRequest(c) return c.Status(fiber.StatusOK).JSON(services.GetCfsGddValues(request)) } diff --git a/models/gdd.go b/models/gdd.go index 1b4f537f2f0715bc4f98d0b5ac591902266efbec..6bd4cc7127fe06a8a3c86650f2b67c1f1563988d 100644 --- a/models/gdd.go +++ b/models/gdd.go @@ -9,6 +9,7 @@ import ( validation "github.com/go-ozzo/ozzo-validation" "github.com/gofiber/fiber/v2" + "github.com/tgs266/dawn-go-common/errors" ) type GddResponse struct { @@ -54,6 +55,23 @@ var BuildGddRequest = func(c *fiber.Ctx) GddRequest { accumulate, errBool := strconv.ParseBool(c.Query("accumulate", "false")) plantingDate, errDate := time.Parse(time.RFC3339, pd) + if errLat != nil || errLon != nil || errBool != nil { + panic(config.BAD_REQUEST) + } + + if errYear != nil && errDate != nil { + panic(errors.NewBadRequest(nil).PutDetail("reason", "no date or year provided")) + } + + // date is provided but year isnt + if errYear != nil && errDate == nil { + year = plantingDate.Year() + } + + if errDate != nil && pd != "" { + panic(errors.NewBadRequest(nil).PutDetail("reason", "date must be ISO8601 or RFC3339 format")) + } + rNew := GddRequest{ Year: year, Product: product, @@ -63,22 +81,31 @@ var BuildGddRequest = func(c *fiber.Ctx) GddRequest { PlantingDate: plantingDate, } - if errYear != nil || errLat != nil || errLon != nil || errBool != nil { + if e := rNew.Validate(); e != nil { + panic(errors.NewBadRequest(e).AddLogDetails(e.Error())) + } + return rNew +} + +var BuildYearlessGddRequest = func(c *fiber.Ctx) GddRequest { + product := c.Query("product") + latitude, errLat := strconv.ParseFloat(c.Query("latitude"), 64) + longitude, errLon := strconv.ParseFloat(c.Query("longitude"), 64) + accumulate, errBool := strconv.ParseBool(c.Query("accumulate", "false")) + + if errLat != nil || errLon != nil || errBool != nil { panic(config.BAD_REQUEST) } - if errDate != nil && pd != "" { - panic(config.BAD_REQUEST.PutDetail("reason", "date must be ISO8601 or RFC3339 format")) + rNew := GddRequest{ + Product: product, + Latitude: latitude, + Longitude: longitude, + Accumulate: accumulate, } - if rNew.Year != 0 { - if e := rNew.Validate(); e != nil { - panic(config.BAD_REQUEST.AddLogDetails(e.Error())) - } - } else { - if e := rNew.ValidateNoYear(); e != nil { - panic(config.BAD_REQUEST.AddLogDetails(e.Error())) - } + if e := rNew.ValidateNoYear(); e != nil { + panic(errors.NewBadRequest(e).AddLogDetails(e.Error())) } return rNew }