Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
misc_controller.go 2.19 KiB
package controllers

import (
	"strconv"

	_ "github.com/tgs266/dawn-go-common/errors"

	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence"
	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence/entities"
	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/services"

	"github.com/gofiber/fiber/v2"
)

// GetAnalogYear godoc
// @Summary Get analog year
// @Tags Gdd
// @Description Get analog year
// @Accept  json
// @Produce  json
// @Success 200 {object} models.AnalogResponse
// @Failure 400 {object} errors.StandardError
// @Param latitude query number true "Latitude to search for"
// @Param longitude query number true "Longitude to search for"
// @Router /gdd/analog [get]
func GetAnalogYear(c *fiber.Ctx) error {
	lat, _ := strconv.ParseFloat(c.Query("latitude", "-10000.0"), 64)
	lon, _ := strconv.ParseFloat(c.Query("longitude", "-10000.0"), 64)
	err := models.ValidateAnalogRequest(lat, lon)
	if err != nil {
		panic(config.BAD_REQUEST)
	}

	location := entities.Location{Type: "Point", Coordinates: []float64{lon, lat}}

	return c.Status(fiber.StatusOK).JSON(
		persistence.FindAnalogYear(location),
	)
}

// GetConfidenceInterval godoc
// @Summary Get confidence interval
// @Tags Gdd
// @Description Get confidence interval
// @Accept  json
// @Produce  json
// @Success 200 {object} models.ConfidenceIntervalResposne
// @Failure 400 {object} errors.StandardError
// @Param product query string true "Crop to calculate gdd for" Enums(corn, soybean, sunflower, tomato, sugar_beet, peanut, cotton, potato, wheat, pea, oat, spring_wheat, rice, sorghum)
// @Param Interval query number true "Interval values" Enums(80, 85, 90, 95, 99, 99.5, 99.9)
// @Param latitude query number true "Latitude to search for"
// @Param longitude query number true "Longitude to search for"
// @Param plantingDate query string true "Plant date, ISO8601 or RFC3339 format"
// @Router /gdd/confidence [get]
func GetConfidenceInterval(c *fiber.Ctx) error {
	r := models.ConfidenceIntervalRequest{}.Build(c)
	return c.Status(fiber.StatusOK).JSON(services.GetConfidenceInterval(r))
}