Skip to content
Snippets Groups Projects
Commit aacc2c58 authored by Tucker Gary Siegel's avatar Tucker Gary Siegel
Browse files

updates

parent 456d977b
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@ func GddRoutes(route fiber.Router) {
route.Get("gdd/daily", controllers.GetDailyGdd)
route.Get("gdd/normals", controllers.GetNormalGdd)
route.Get("gdd/gefs", controllers.GetGefsGDD)
route.Get("gdd/cfs", controllers.GetCfsGDD)
route.Get("gdd/analog", controllers.GetAnalogYear)
route.Get("gdd/confidence", controllers.GetConfidenceInterval)
}
......@@ -45,6 +45,7 @@ func GetAnalogYear(c *fiber.Ctx) error {
// @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 latitude query number true "Latitude to search for"
// @Param longitude query number true "Longitude to search for"
// @Router /api/weather/gdd/confidence [get]
......
......@@ -24,3 +24,21 @@ func GetGefsGDD(c *fiber.Ctx) error {
request := models.GddRequest{}.Build(c)
return c.Status(fiber.StatusOK).JSON(services.GetGefsGddValues(request))
}
// GetCfsGDD godoc
// @Summary Get GDD values calculated from CFS
// @Tags Gdd
// @Description Get GDD values calculated from CFS
// @Accept json
// @Produce json
// @Success 200 {object} models.CfsGddResponse
// @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 latitude query number true "Latitude to search for"
// @Param longitude query number true "Longitude to search for"
// @Param accumulate query boolean true "Accumulate gdd values"
// @Router /api/weather/gdd/cfs [get]
func GetCfsGDD(c *fiber.Ctx) error {
request := models.GddRequest{}.Build(c)
return c.Status(fiber.StatusOK).JSON(services.GetCfsGddValues(request))
}
......@@ -72,6 +72,51 @@ var doc = `{
}
}
},
"/api/weather/gdd/confidence": {
"get": {
"description": "Get confidence interval",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Gdd"
],
"summary": "Get confidence interval",
"parameters": [
{
"type": "number",
"description": "Latitude to search for",
"name": "latitude",
"in": "query",
"required": true
},
{
"type": "number",
"description": "Longitude to search for",
"name": "longitude",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.ConfidenceIntervalResposne"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/errors.StandardError"
}
}
}
}
},
"/api/weather/gdd/daily": {
"get": {
"description": "get gdd values",
......@@ -337,17 +382,46 @@ var doc = `{
"analog_year": {
"type": "integer"
},
"nearest_latitude": {
"closest_latitude": {
"type": "number"
},
"nearest_longitude": {
"closest_longitude": {
"type": "number"
}
}
},
"models.ConfidenceIntervalResposne": {
"type": "object",
"properties": {
"closestLatitude": {
"type": "number"
},
"closestLongitude": {
"type": "number"
},
"lowerBound": {
"type": "array",
"items": {
"type": "number"
}
},
"upperBound": {
"type": "array",
"items": {
"type": "number"
}
}
}
},
"models.GddResponse": {
"type": "object",
"properties": {
"closest_latitude": {
"type": "number"
},
"closest_longitude": {
"type": "number"
},
"gdd_values": {
"type": "array",
"items": {
......@@ -357,12 +431,6 @@ var doc = `{
"last_date": {
"type": "string"
},
"nearest_latitude": {
"type": "number"
},
"nearest_longitude": {
"type": "number"
},
"product": {
"type": "string"
}
......@@ -371,6 +439,12 @@ var doc = `{
"models.GefsGddResponse": {
"type": "object",
"properties": {
"closest_latitude": {
"type": "number"
},
"closest_longitude": {
"type": "number"
},
"first_date": {
"type": "string"
},
......@@ -383,12 +457,6 @@ var doc = `{
"last_date": {
"type": "string"
},
"nearest_latitude": {
"type": "number"
},
"nearest_longitude": {
"type": "number"
},
"product": {
"type": "string"
}
......
......@@ -57,6 +57,51 @@
}
}
},
"/api/weather/gdd/confidence": {
"get": {
"description": "Get confidence interval",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Gdd"
],
"summary": "Get confidence interval",
"parameters": [
{
"type": "number",
"description": "Latitude to search for",
"name": "latitude",
"in": "query",
"required": true
},
{
"type": "number",
"description": "Longitude to search for",
"name": "longitude",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.ConfidenceIntervalResposne"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/errors.StandardError"
}
}
}
}
},
"/api/weather/gdd/daily": {
"get": {
"description": "get gdd values",
......@@ -322,17 +367,46 @@
"analog_year": {
"type": "integer"
},
"nearest_latitude": {
"closest_latitude": {
"type": "number"
},
"nearest_longitude": {
"closest_longitude": {
"type": "number"
}
}
},
"models.ConfidenceIntervalResposne": {
"type": "object",
"properties": {
"closestLatitude": {
"type": "number"
},
"closestLongitude": {
"type": "number"
},
"lowerBound": {
"type": "array",
"items": {
"type": "number"
}
},
"upperBound": {
"type": "array",
"items": {
"type": "number"
}
}
}
},
"models.GddResponse": {
"type": "object",
"properties": {
"closest_latitude": {
"type": "number"
},
"closest_longitude": {
"type": "number"
},
"gdd_values": {
"type": "array",
"items": {
......@@ -342,12 +416,6 @@
"last_date": {
"type": "string"
},
"nearest_latitude": {
"type": "number"
},
"nearest_longitude": {
"type": "number"
},
"product": {
"type": "string"
}
......@@ -356,6 +424,12 @@
"models.GefsGddResponse": {
"type": "object",
"properties": {
"closest_latitude": {
"type": "number"
},
"closest_longitude": {
"type": "number"
},
"first_date": {
"type": "string"
},
......@@ -368,12 +442,6 @@
"last_date": {
"type": "string"
},
"nearest_latitude": {
"type": "number"
},
"nearest_longitude": {
"type": "number"
},
"product": {
"type": "string"
}
......
......@@ -20,28 +20,47 @@ definitions:
properties:
analog_year:
type: integer
nearest_latitude:
closest_latitude:
type: number
nearest_longitude:
closest_longitude:
type: number
type: object
models.ConfidenceIntervalResposne:
properties:
closestLatitude:
type: number
closestLongitude:
type: number
lowerBound:
items:
type: number
type: array
upperBound:
items:
type: number
type: array
type: object
models.GddResponse:
properties:
closest_latitude:
type: number
closest_longitude:
type: number
gdd_values:
items:
type: number
type: array
last_date:
type: string
nearest_latitude:
type: number
nearest_longitude:
type: number
product:
type: string
type: object
models.GefsGddResponse:
properties:
closest_latitude:
type: number
closest_longitude:
type: number
first_date:
type: string
gdd_values:
......@@ -50,10 +69,6 @@ definitions:
type: array
last_date:
type: string
nearest_latitude:
type: number
nearest_longitude:
type: number
product:
type: string
type: object
......@@ -96,6 +111,36 @@ paths:
summary: Get analog year
tags:
- Gdd
/api/weather/gdd/confidence:
get:
consumes:
- application/json
description: Get confidence interval
parameters:
- description: Latitude to search for
in: query
name: latitude
required: true
type: number
- description: Longitude to search for
in: query
name: longitude
required: true
type: number
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.ConfidenceIntervalResposne'
"400":
description: Bad Request
schema:
$ref: '#/definitions/errors.StandardError'
summary: Get confidence interval
tags:
- Gdd
/api/weather/gdd/daily:
get:
consumes:
......
......@@ -30,7 +30,7 @@ func registerSwagger(app *fiber.App) {
func registerCors(app *fiber.App) {
app.Use(cors.New(cors.Config{
AllowOrigins: "http://localhost:3000, http://localhost:4200",
AllowOrigins: "http://localhost:3000, http://localhost:4200, http://localhost:5000",
AllowHeaders: "Origin, Content-Type, Accept",
}))
}
......
package models
import "time"
type CfsGddResponse struct {
Product string `json:"product"`
ClosestLatitude float64 `json:"closest_latitude"`
ClosestLongitude float64 `json:"closest_longitude"`
GddValues []float64 `json:"gdd_values"`
FirstDate time.Time `json:"first_date"`
}
......@@ -19,10 +19,10 @@ type ConfidenceIntervalRequest struct {
}
type ConfidenceIntervalResposne struct {
LowerBound []float64 `bson:"lower_bound,omitempty"`
UpperBound []float64 `bson:"upper_bound,omitempty"`
ClosestLatitude float64 `bson:"closest_latitude,omitempty"`
ClosestLongitude float64 `bson:"closest_longitude,omitempty"`
LowerBound []float64 `json:"lower_bound,omitempty"`
UpperBound []float64 `json:"upper_bound,omitempty"`
ClosestLatitude float64 `json:"closest_latitude,omitempty"`
ClosestLongitude float64 `json:"closest_longitude,omitempty"`
}
var IntervalConvert = map[float64]float64{
......
......@@ -28,3 +28,11 @@ type GefsGdd struct {
MaxTemp float64 `bson:"max_temp,omitempty"`
Date primitive.DateTime `bson:"date,omitempty"`
}
type CfsGdd struct {
ID string `bson:"_id,omitempty"`
Location Location `bson:"location,omitempty"`
MinTemps []float64 `bson:"min_temps,omitempty"`
MaxTemps []float64 `bson:"max_temps,omitempty"`
StartDate primitive.DateTime `bson:"start_date,omitempty"`
}
......@@ -136,6 +136,20 @@ func GefsFindAllByLocation(location entities.Location) []entities.GefsGdd {
return results
}
func CfsFindAllByLocation(location entities.Location) entities.CfsGdd {
coll := Conn.Database(viper.GetString("db.database")).Collection("cfs")
filter := buildLocationRequest(location, nil)
var g entities.CfsGdd
err := coll.FindOne(Ctx, filter).Decode(&g)
if err != nil {
panic(errors.NO_DATA_FOUND)
}
return g
}
func FindAnalogYear(location entities.Location) models.AnalogResponse {
coll := Conn.Database(viper.GetString("db.database")).Collection("gdd_current")
......
......@@ -45,7 +45,7 @@ func GetConfidenceInterval(request models.ConfidenceIntervalRequest) models.Conf
gddMinSum += minGddValue
gddMaxSum += maxGddValue
lowerBound = append(lowerBound, minGddValue)
lowerBound = append(lowerBound, gddMinSum)
upperBound = append(upperBound, gddMaxSum)
}
......
......@@ -29,8 +29,34 @@ func GetGefsGddValues(request models.GddRequest) models.GefsGddResponse {
ClosestLatitude: location.Coordinates[1],
ClosestLongitude: location.Coordinates[0],
GddValues: gdds,
FirstDate: g[0].Date.Time(),
LastDate: g[9].Date.Time(),
FirstDate: g[0].Date.Time().UTC(),
LastDate: g[9].Date.Time().UTC(),
}
return returnGdds
}
func GetCfsGddValues(request models.GddRequest) models.CfsGddResponse {
product := enums.GetProductFromString(request.Product)
location := request.BuildLocation()
g := persistence.CfsFindAllByLocation(location)
var returnGdds models.CfsGddResponse
var gdds []float64
for i := 0; i < len(g.MaxTemps); i++ {
value := utils.CalculateSingleGdd(g.MinTemps[i], g.MaxTemps[i], product)
if request.Accumulate && i > 0 {
value += gdds[len(gdds)-1]
}
gdds = append(gdds, value)
}
returnGdds = models.CfsGddResponse{
Product: product.Name,
ClosestLatitude: location.Coordinates[1],
ClosestLongitude: location.Coordinates[0],
GddValues: gdds,
FirstDate: g.StartDate.Time().UTC(),
}
return returnGdds
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment