From e36a69cff5f5f83d2c8e7d305f87086b304c98e6 Mon Sep 17 00:00:00 2001
From: tgs266 <siegel.tucker@gmail.com>
Date: Thu, 23 Sep 2021 14:34:05 -0400
Subject: [PATCH] refactor to extract common package features to move to new
 repo

---
 {context => common}/context.go          | 10 ++---
 {errors => common}/dawn_errors.go       | 50 +-----------------------
 {logger => common}/logger.go            | 13 +++----
 config/error_codes.go                   | 51 +++++++++++++++++++++++++
 config/routes.go                        | 23 -----------
 controllers/data_download_controller.go |  4 +-
 controllers/gdd_controller.go           |  4 +-
 controllers/misc_controller.go          |  4 +-
 controllers/routes.go                   | 21 ++++++++++
 controllers/seed_controllers.go         |  5 ++-
 main.go                                 | 23 +++++------
 models/confidence_interval.go           |  4 +-
 models/csv.go                           |  4 +-
 models/enums/product_type.go            |  4 +-
 models/freezing_dates.go                |  4 +-
 models/gdd.go                           |  8 ++--
 models/seeds.go                         |  4 +-
 persistence/mongodb.go                  | 27 ++++++-------
 services/data_download_service.go       | 18 ++++-----
 services/freezing_date_service.go       |  4 +-
 services/gdd_service.go                 | 12 +++---
 services/seed_service.go                | 11 +++---
 22 files changed, 154 insertions(+), 154 deletions(-)
 rename {context => common}/context.go (60%)
 rename {errors => common}/dawn_errors.go (63%)
 rename {logger => common}/logger.go (93%)
 create mode 100644 config/error_codes.go
 delete mode 100644 config/routes.go
 create mode 100644 controllers/routes.go

diff --git a/context/context.go b/common/context.go
similarity index 60%
rename from context/context.go
rename to common/context.go
index d56374c..6dfdc76 100644
--- a/context/context.go
+++ b/common/context.go
@@ -1,8 +1,6 @@
-package context
+package common
 
 import (
-	"dawn-weather/logger"
-
 	"github.com/gofiber/fiber/v2"
 )
 
@@ -11,13 +9,13 @@ type DawnCtx struct {
 }
 
 func (ctx DawnCtx) INFO(message string) {
-	logger.INFO(ctx.FiberCtx, message)
+	INFO(ctx.FiberCtx, message)
 }
 
 func (ctx DawnCtx) DEBUG(message string) {
-	logger.DEBUG(ctx.FiberCtx, message)
+	DEBUG(ctx.FiberCtx, message)
 }
 
 func (ctx DawnCtx) TRACE(message string) {
-	logger.TRACE(ctx.FiberCtx, message)
+	TRACE(ctx.FiberCtx, message)
 }
diff --git a/errors/dawn_errors.go b/common/dawn_errors.go
similarity index 63%
rename from errors/dawn_errors.go
rename to common/dawn_errors.go
index 45289c9..4532802 100644
--- a/errors/dawn_errors.go
+++ b/common/dawn_errors.go
@@ -1,4 +1,4 @@
-package errors
+package common
 
 import (
 	"encoding/json"
@@ -77,51 +77,3 @@ func (err *DawnError) LogString(c *fiber.Ctx) {
 	}
 	fmt.Println(output)
 }
-
-func INVALID_PRODUCT(passedProduct string) *DawnError {
-	return &DawnError{
-		Name:        "INVALID_PRODUCT",
-		Description: "Product type '" + passedProduct + "' is invalid",
-		Code:        400,
-	}
-}
-
-var BAD_REQUEST = &DawnError{
-	Name:        "BAD_REQUEST",
-	Description: "Bad request was submitted",
-	Code:        400,
-}
-
-func SEED_TYPE_MISMATCH(passedSeed string, expectedSeed string) *DawnError {
-	return &DawnError{
-		Name:        "SEED_TYPE_MISMATCH",
-		Description: "Seed '" + passedSeed + "' was not of expected seed type '" + expectedSeed + "'",
-		Code:        400,
-	}
-}
-
-var NO_DATA_FOUND = &DawnError{
-	Name:        "NO_DATA_FOUND",
-	Description: "No data found for request",
-	Code:        404,
-}
-
-// 500s
-
-var INTERNAL_SERVER_STANDARD_ERROR = &DawnError{
-	Name:        "INTERNAL_SERVER_ERROR",
-	Description: "Unkown internal server error occurred",
-	Code:        500,
-}
-
-var DATE_PARSE_FAILURE = &DawnError{
-	Name:        "DATE_PARSE_FAILURE",
-	Description: "Date parse failure",
-	Code:        500,
-}
-
-var FILE_CREATION_ERROR = &DawnError{
-	Name:        "FILE_CREATION_ERROR",
-	Description: "Could not create file",
-	Code:        500,
-}
diff --git a/logger/logger.go b/common/logger.go
similarity index 93%
rename from logger/logger.go
rename to common/logger.go
index cbda320..efa3111 100644
--- a/logger/logger.go
+++ b/common/logger.go
@@ -1,7 +1,6 @@
-package logger
+package common
 
 import (
-	"dawn-weather/errors"
 	"encoding/json"
 	"fmt"
 	"os"
@@ -18,7 +17,7 @@ type RequestLog struct {
 	PID        string
 	Level      string
 	RequestId  string
-	Error      *errors.DawnError
+	Error      *DawnError
 	StatusCode string
 	Method     string
 	Path       string
@@ -118,12 +117,12 @@ func New() fiber.Handler {
 	}
 }
 
-func ErrorHandler(ctx *fiber.Ctx, err error) *errors.DawnError {
-	var returnError *errors.DawnError
-	if e, ok := err.(*errors.DawnError); ok {
+func ErrorHandler(ctx *fiber.Ctx, err error) *DawnError {
+	var returnError *DawnError
+	if e, ok := err.(*DawnError); ok {
 		returnError = e
 	} else {
-		returnError = errors.Build(err)
+		returnError = Build(err)
 	}
 
 	return returnError
diff --git a/config/error_codes.go b/config/error_codes.go
new file mode 100644
index 0000000..dd62656
--- /dev/null
+++ b/config/error_codes.go
@@ -0,0 +1,51 @@
+package config
+
+import "dawn-weather/common"
+
+func INVALID_PRODUCT(passedProduct string) *common.DawnError {
+	return &common.DawnError{
+		Name:        "INVALID_PRODUCT",
+		Description: "Product type '" + passedProduct + "' is invalid",
+		Code:        400,
+	}
+}
+
+var BAD_REQUEST = &common.DawnError{
+	Name:        "BAD_REQUEST",
+	Description: "Bad request was submitted",
+	Code:        400,
+}
+
+func SEED_TYPE_MISMATCH(passedSeed string, expectedSeed string) *common.DawnError {
+	return &common.DawnError{
+		Name:        "SEED_TYPE_MISMATCH",
+		Description: "Seed '" + passedSeed + "' was not of expected seed type '" + expectedSeed + "'",
+		Code:        400,
+	}
+}
+
+var NO_DATA_FOUND = &common.DawnError{
+	Name:        "NO_DATA_FOUND",
+	Description: "No data found for request",
+	Code:        404,
+}
+
+// 500s
+
+var INTERNAL_SERVER_STANDARD_ERROR = &common.DawnError{
+	Name:        "INTERNAL_SERVER_ERROR",
+	Description: "Unkown internal server error occurred",
+	Code:        500,
+}
+
+var DATE_PARSE_FAILURE = &common.DawnError{
+	Name:        "DATE_PARSE_FAILURE",
+	Description: "Date parse failure",
+	Code:        500,
+}
+
+var FILE_CREATION_ERROR = &common.DawnError{
+	Name:        "FILE_CREATION_ERROR",
+	Description: "Could not create file",
+	Code:        500,
+}
diff --git a/config/routes.go b/config/routes.go
deleted file mode 100644
index 3fdcfac..0000000
--- a/config/routes.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package config
-
-import (
-	"dawn-weather/controllers"
-
-	"github.com/gofiber/fiber/v2"
-)
-
-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)
-
-	route.Get("freezing-dates", controllers.GetFreezingDates)
-
-	route.Get("gdd/csv", controllers.GetCSVFile)
-
-	route.Get("gdd/seeds/corn", controllers.GetCornSeedMaturityDate)
-	route.Get("gdd/seeds", controllers.GetSeedList)
-}
diff --git a/controllers/data_download_controller.go b/controllers/data_download_controller.go
index 46a58f1..b08a87a 100644
--- a/controllers/data_download_controller.go
+++ b/controllers/data_download_controller.go
@@ -1,7 +1,7 @@
 package controllers
 
 import (
-	"dawn-weather/context"
+	"dawn-weather/common"
 	"dawn-weather/models"
 	"dawn-weather/services"
 
@@ -37,7 +37,7 @@ import (
 // @Router /api/weather/gdd/csv [get]
 func GetCSVFile(c *fiber.Ctx) error {
 	request := models.CSVRequest{}.Build(c)
-	ctx := context.DawnCtx{FiberCtx: c}
+	ctx := common.DawnCtx{FiberCtx: c}
 	fileText := services.GetDataDownload(ctx, request)
 	e := c.Status(fiber.StatusOK).SendString(fileText)
 	return e
diff --git a/controllers/gdd_controller.go b/controllers/gdd_controller.go
index 67818ab..ae8487b 100644
--- a/controllers/gdd_controller.go
+++ b/controllers/gdd_controller.go
@@ -1,7 +1,7 @@
 package controllers
 
 import (
-	"dawn-weather/context"
+	"dawn-weather/common"
 	"dawn-weather/models"
 	"dawn-weather/services"
 
@@ -25,7 +25,7 @@ var GetGddValues = services.GetGddValues
 // @Param accumulate query boolean true "Accumulate gdd values"
 // @Router /api/weather/gdd/daily [get]
 func GetDailyGdd(c *fiber.Ctx) error {
-	ctx := context.DawnCtx{FiberCtx: c}
+	ctx := common.DawnCtx{FiberCtx: c}
 	request := models.BuildGddRequest(ctx.FiberCtx)
 	return c.Status(fiber.StatusOK).JSON(GetGddValues(ctx, request))
 }
diff --git a/controllers/misc_controller.go b/controllers/misc_controller.go
index b93933d..cc974e8 100644
--- a/controllers/misc_controller.go
+++ b/controllers/misc_controller.go
@@ -1,7 +1,7 @@
 package controllers
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"dawn-weather/models"
 	"dawn-weather/persistence"
 	"dawn-weather/persistence/entities"
@@ -27,7 +27,7 @@ func GetAnalogYear(c *fiber.Ctx) error {
 	lon, _ := strconv.ParseFloat(c.Query("longitude", "-10000.0"), 64)
 	err := models.ValidateAnalogRequest(lat, lon)
 	if err != nil {
-		panic(DawnErrors.BAD_REQUEST)
+		panic(config.BAD_REQUEST)
 	}
 
 	location := entities.Location{Type: "Point", Coordinates: []float64{lon, lat}}
diff --git a/controllers/routes.go b/controllers/routes.go
new file mode 100644
index 0000000..2df6c3b
--- /dev/null
+++ b/controllers/routes.go
@@ -0,0 +1,21 @@
+package controllers
+
+import (
+	"github.com/gofiber/fiber/v2"
+)
+
+func GddRoutes(route fiber.Router) {
+	route.Get("gdd/daily", GetDailyGdd)
+	route.Get("gdd/normals", GetNormalGdd)
+	route.Get("gdd/gefs", GetGefsGDD)
+	route.Get("gdd/cfs", GetCfsGDD)
+	route.Get("gdd/analog", GetAnalogYear)
+	route.Get("gdd/confidence", GetConfidenceInterval)
+
+	route.Get("freezing-dates", GetFreezingDates)
+
+	route.Get("gdd/csv", GetCSVFile)
+
+	route.Get("gdd/seeds/corn", GetCornSeedMaturityDate)
+	route.Get("gdd/seeds", GetSeedList)
+}
diff --git a/controllers/seed_controllers.go b/controllers/seed_controllers.go
index 583274e..13f926e 100644
--- a/controllers/seed_controllers.go
+++ b/controllers/seed_controllers.go
@@ -1,6 +1,7 @@
 package controllers
 
 import (
+	"dawn-weather/common"
 	"dawn-weather/models"
 	"dawn-weather/services"
 
@@ -39,9 +40,9 @@ func GetSeedList(c *fiber.Ctx) error {
 // @Param date query number true "date planted"
 // @Router /api/weather/gdd/seeds/corn [get]
 func GetCornSeedMaturityDate(c *fiber.Ctx) error {
-
+	ctx := common.DawnCtx{FiberCtx: c}
 	request := models.BuildCornMaturityRequest(c)
 	return c.Status(fiber.StatusOK).JSON(
-		services.GetCornMaturityDate(c, request),
+		services.GetCornMaturityDate(ctx, request),
 	)
 }
diff --git a/main.go b/main.go
index 7903083..343fba4 100644
--- a/main.go
+++ b/main.go
@@ -1,9 +1,9 @@
 package main
 
 import (
+	"dawn-weather/common"
 	"dawn-weather/config"
-	"dawn-weather/errors"
-	"dawn-weather/logger"
+	"dawn-weather/controllers"
 	"dawn-weather/persistence"
 	"strconv"
 
@@ -11,6 +11,7 @@ import (
 	swagger "github.com/arsmn/fiber-swagger/v2"
 	"github.com/gofiber/fiber/v2"
 	"github.com/gofiber/fiber/v2/middleware/cors"
+	"github.com/gofiber/fiber/v2/middleware/logger"
 	"github.com/gofiber/fiber/v2/middleware/recover"
 	"github.com/gofiber/fiber/v2/middleware/requestid"
 	"github.com/gofiber/fiber/v2/utils"
@@ -21,7 +22,7 @@ import (
 
 func registerRoutes(app *fiber.App) {
 	api := app.Group(viper.GetString("server.context-path"))
-	config.GddRoutes(api)
+	controllers.GddRoutes(api)
 }
 
 func registerSwagger(app *fiber.App) {
@@ -62,24 +63,24 @@ func createFiberConfig() fiber.Config {
 		ErrorHandler: func(ctx *fiber.Ctx, err error) error {
 
 			code := fiber.StatusInternalServerError
-			message := errors.StandardError{Source: viper.GetString("app.name"), ErrorCode: "INTERNAL_SERVER",
+			message := common.StandardError{Source: viper.GetString("app.name"), ErrorCode: "INTERNAL_SERVER",
 				Description: "Internal Server Error Occurred", Details: map[string]string{"RequestId": ""}}
 
-			if e, ok := err.(*errors.DawnError); ok {
+			if e, ok := err.(*common.DawnError); ok {
 				code = e.Code
-				message = err.(*errors.DawnError).BuildStandardError(ctx)
+				message = err.(*common.DawnError).BuildStandardError(ctx)
 			} else {
-				err = errors.Build(err)
+				err = common.Build(err)
 			}
 
-			logMessage := logger.BuildMessage(ctx)
-			logMessage.Error = err.(*errors.DawnError)
+			logMessage := common.BuildMessage(ctx)
+			logMessage.Error = err.(*common.DawnError)
 			logMessage.StatusCode = strconv.Itoa(code)
 
-			logger.LogRequest(logMessage)
+			common.LogRequest(logMessage)
 
 			if code == 500 {
-				message = errors.INTERNAL_SERVER_STANDARD_ERROR.BuildStandardError(ctx)
+				message = config.INTERNAL_SERVER_STANDARD_ERROR.BuildStandardError(ctx)
 			}
 
 			err = ctx.Status(code).JSON(message)
diff --git a/models/confidence_interval.go b/models/confidence_interval.go
index f7091c1..6f07a5a 100644
--- a/models/confidence_interval.go
+++ b/models/confidence_interval.go
@@ -1,7 +1,7 @@
 package models
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"dawn-weather/models/enums"
 	"dawn-weather/persistence/entities"
 	"errors"
@@ -67,7 +67,7 @@ func (r ConfidenceIntervalRequest) Build(c *fiber.Ctx) ConfidenceIntervalRequest
 	}
 
 	if rNew.Validate() != nil {
-		panic(DawnErrors.BAD_REQUEST)
+		panic(config.BAD_REQUEST)
 	}
 
 	return rNew
diff --git a/models/csv.go b/models/csv.go
index 5885c3e..93706e5 100644
--- a/models/csv.go
+++ b/models/csv.go
@@ -1,7 +1,7 @@
 package models
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"strconv"
 	"time"
 
@@ -86,7 +86,7 @@ func (r CSVRequest) Build(c *fiber.Ctx) CSVRequest {
 	}
 
 	if e := newRequest.Validate(); e != nil {
-		panic(DawnErrors.BAD_REQUEST.AddLogDetails(e.Error()))
+		panic(config.BAD_REQUEST.AddLogDetails(e.Error()))
 	}
 
 	return newRequest
diff --git a/models/enums/product_type.go b/models/enums/product_type.go
index 76bd38e..3e93129 100644
--- a/models/enums/product_type.go
+++ b/models/enums/product_type.go
@@ -1,7 +1,7 @@
 package enums
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"strings"
 )
 
@@ -89,5 +89,5 @@ func GetProductFromString(productString string) Product {
 	case strings.ToLower(ProductType.SORGHUM.Name):
 		return ProductType.SORGHUM
 	}
-	panic(DawnErrors.INVALID_PRODUCT(productString))
+	panic(config.INVALID_PRODUCT(productString))
 }
diff --git a/models/freezing_dates.go b/models/freezing_dates.go
index 1458d30..9d19ed6 100644
--- a/models/freezing_dates.go
+++ b/models/freezing_dates.go
@@ -1,7 +1,7 @@
 package models
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"dawn-weather/persistence/entities"
 	"strconv"
 	"time"
@@ -48,7 +48,7 @@ func (r FreezingDateRequest) Build(c *fiber.Ctx) FreezingDateRequest {
 	}
 
 	if rNew.Validate() != nil {
-		panic(DawnErrors.BAD_REQUEST)
+		panic(config.BAD_REQUEST)
 	}
 
 	return rNew
diff --git a/models/gdd.go b/models/gdd.go
index 8c818db..91798e7 100644
--- a/models/gdd.go
+++ b/models/gdd.go
@@ -1,7 +1,7 @@
 package models
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"dawn-weather/persistence/entities"
 	"strconv"
 	"time"
@@ -59,16 +59,16 @@ var BuildGddRequest = func(c *fiber.Ctx) GddRequest {
 	}
 
 	if errYear != nil || errLat != nil || errLon != nil || errBool != nil {
-		panic(DawnErrors.BAD_REQUEST)
+		panic(config.BAD_REQUEST)
 	}
 
 	if rNew.Year != 0 {
 		if e := rNew.Validate(); e != nil {
-			panic(DawnErrors.BAD_REQUEST.AddLogDetails(e.Error()))
+			panic(config.BAD_REQUEST.AddLogDetails(e.Error()))
 		}
 	} else {
 		if e := rNew.ValidateNoYear(); e != nil {
-			panic(DawnErrors.BAD_REQUEST.AddLogDetails(e.Error()))
+			panic(config.BAD_REQUEST.AddLogDetails(e.Error()))
 		}
 	}
 	return rNew
diff --git a/models/seeds.go b/models/seeds.go
index f370bf0..e5144fe 100644
--- a/models/seeds.go
+++ b/models/seeds.go
@@ -1,7 +1,7 @@
 package models
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"strconv"
 	"time"
 
@@ -59,7 +59,7 @@ func BuildCornMaturityRequest(c *fiber.Ctx) CornMaturityRequest {
 	}
 
 	if e := newRequest.Validate(); e != nil {
-		panic(DawnErrors.BAD_REQUEST.AddLogDetails(e.Error()))
+		panic(config.BAD_REQUEST.AddLogDetails(e.Error()))
 	}
 
 	return newRequest
diff --git a/persistence/mongodb.go b/persistence/mongodb.go
index e91aad4..2a2bd3d 100644
--- a/persistence/mongodb.go
+++ b/persistence/mongodb.go
@@ -2,7 +2,8 @@ package persistence
 
 import (
 	"context"
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/common"
+	"dawn-weather/config"
 	"dawn-weather/models"
 	"dawn-weather/persistence/entities"
 	"strings"
@@ -60,7 +61,7 @@ func buildLocationRequest(location entities.Location, year *int) bson.D {
 	return filter
 }
 
-func CurrentGddFindFirstByYearAndLocation(location entities.Location) entities.Gdd {
+func CurrentGddFindFirstByYearAndLocation(ctx common.DawnCtx, location entities.Location) entities.Gdd {
 	coll := Conn.Database(viper.GetString("db.database")).Collection("gdd_current")
 
 	filter := buildLocationRequest(location, nil)
@@ -68,7 +69,7 @@ func CurrentGddFindFirstByYearAndLocation(location entities.Location) entities.G
 	var g entities.Gdd
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return g
@@ -82,7 +83,7 @@ func GddFindFirstByYearAndLocation(year int, location entities.Location) entitie
 	var g entities.Gdd
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return g
@@ -96,7 +97,7 @@ func NormalsFindFirstByYearAndLocation(location entities.Location) entities.Norm
 	var n entities.Normal
 	err := coll.FindOne(Ctx, filter).Decode(&n)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return n
@@ -116,7 +117,7 @@ func GefsFindAllByLocation(location entities.Location) []entities.GefsGdd {
 
 	cursor, err := coll.Find(Ctx, filter, options)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	for cursor.Next(context.TODO()) {
@@ -124,7 +125,7 @@ func GefsFindAllByLocation(location entities.Location) []entities.GefsGdd {
 		var elem entities.GefsGdd
 		err := cursor.Decode(&elem)
 		if err != nil {
-			panic(DawnErrors.NO_DATA_FOUND)
+			panic(config.NO_DATA_FOUND)
 		}
 
 		results = append(results, elem)
@@ -145,7 +146,7 @@ func CfsFindAllByLocation(location entities.Location) entities.CfsGdd {
 	var g entities.CfsGdd
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return g
@@ -159,7 +160,7 @@ func FindAnalogYear(location entities.Location) models.AnalogResponse {
 	var g entities.Gdd
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	results := models.AnalogResponse{
@@ -179,7 +180,7 @@ func FindFreezingDates(location entities.Location) entities.FreezingDates {
 	var g entities.FreezingDates
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return g
@@ -195,7 +196,7 @@ func FindSeed(seedName string) entities.Seed {
 	var g entities.Seed
 	err := coll.FindOne(Ctx, filter).Decode(&g)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	return g
@@ -215,7 +216,7 @@ func FindSeeds(product string) []entities.Seed {
 
 	cursor, err := coll.Find(Ctx, filter, options)
 	if err != nil {
-		panic(DawnErrors.NO_DATA_FOUND)
+		panic(config.NO_DATA_FOUND)
 	}
 
 	for cursor.Next(context.TODO()) {
@@ -223,7 +224,7 @@ func FindSeeds(product string) []entities.Seed {
 		var elem entities.Seed
 		err := cursor.Decode(&elem)
 		if err != nil {
-			panic(DawnErrors.NO_DATA_FOUND)
+			panic(config.NO_DATA_FOUND)
 		}
 
 		results = append(results, elem)
diff --git a/services/data_download_service.go b/services/data_download_service.go
index 82b0de1..515efed 100644
--- a/services/data_download_service.go
+++ b/services/data_download_service.go
@@ -1,8 +1,8 @@
 package services
 
 import (
-	"dawn-weather/context"
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/common"
+	"dawn-weather/config"
 	"dawn-weather/models"
 	"dawn-weather/models/enums"
 	"dawn-weather/persistence"
@@ -93,7 +93,7 @@ func fillDates() []time.Time {
 	return dates
 }
 
-func getPrimary(c context.DawnCtx, request models.CSVRequest, dates []time.Time) []float64 {
+func getPrimary(c common.DawnCtx, request models.CSVRequest, dates []time.Time) []float64 {
 	gddRequest := models.GddRequest{
 		Year:       request.Year,
 		Product:    request.Product,
@@ -153,7 +153,7 @@ func _parseDate(date string) time.Time {
 	const layout = "2006-Jan-02"
 	newDate, e := time.Parse(layout, date)
 	if e != nil {
-		panic(DawnErrors.DATE_PARSE_FAILURE.AddLogDetails(e.Error()))
+		panic(config.DATE_PARSE_FAILURE.AddLogDetails(e.Error()))
 	}
 	return newDate
 }
@@ -188,7 +188,7 @@ func parseDate(date string) time.Time {
 	case "12":
 		return _parseDate("1981-Dev-" + day)
 	}
-	panic(DawnErrors.DATE_PARSE_FAILURE.AddLogDetails("Failed converting " + date + " to proper format."))
+	panic(config.DATE_PARSE_FAILURE.AddLogDetails("Failed converting " + date + " to proper format."))
 }
 
 func getFreezingDates(request models.CSVRequest, dates []time.Time) [][]int {
@@ -231,7 +231,7 @@ func getFreezingDates(request models.CSVRequest, dates []time.Time) [][]int {
 	return [][]int{firstFreezingValues, lastFreezingValues}
 }
 
-func getComparisonYear(c context.DawnCtx, request models.CSVRequest, dates []time.Time) []float64 {
+func getComparisonYear(c common.DawnCtx, request models.CSVRequest, dates []time.Time) []float64 {
 	gddRequest := models.GddRequest{
 		Year:       request.ComparisonYear,
 		Product:    request.Product,
@@ -347,7 +347,7 @@ func getGefsData(request models.CSVRequest, dates []time.Time) []float64 {
 	return fullGddValues
 }
 
-func pullData(c context.DawnCtx, request models.CSVRequest) CSVData {
+func pullData(c common.DawnCtx, request models.CSVRequest) CSVData {
 	returnData := CSVData{}
 	dates := fillDates()
 	returnData.Date = dates
@@ -425,14 +425,14 @@ func createRecords(keys []string, data CSVData) [][]string {
 	return records
 }
 
-func GetDataDownload(c context.DawnCtx, request models.CSVRequest) string {
+func GetDataDownload(c common.DawnCtx, request models.CSVRequest) string {
 
 	fileId := uuid.New()
 
 	f, err := os.Create(fileId.String() + ".csv")
 
 	if err != nil {
-		panic(DawnErrors.FILE_CREATION_ERROR.AddLogDetails("Could not create file"))
+		panic(config.FILE_CREATION_ERROR.AddLogDetails("Could not create file"))
 	}
 
 	w := csv.NewWriter(f)
diff --git a/services/freezing_date_service.go b/services/freezing_date_service.go
index 14990b3..de9339d 100644
--- a/services/freezing_date_service.go
+++ b/services/freezing_date_service.go
@@ -1,7 +1,7 @@
 package services
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/config"
 	"dawn-weather/models"
 	"dawn-weather/persistence"
 	"dawn-weather/persistence/entities"
@@ -45,7 +45,7 @@ func GetFreezingDate(request models.FreezingDateRequest) models.FreezingDateResp
 	}
 
 	if tempIdx == -1 {
-		panic(DawnErrors.BAD_REQUEST)
+		panic(config.BAD_REQUEST)
 	}
 
 	firstDates := freezingDates.FirstDates[tempIdx]
diff --git a/services/gdd_service.go b/services/gdd_service.go
index 670e171..8570e3b 100644
--- a/services/gdd_service.go
+++ b/services/gdd_service.go
@@ -1,22 +1,20 @@
 package services
 
 import (
-	"dawn-weather/context"
+	"dawn-weather/common"
 	"dawn-weather/models"
 	"dawn-weather/models/enums"
 	"dawn-weather/persistence"
 	"dawn-weather/persistence/entities"
 	"dawn-weather/utils"
 	"time"
-
-	"github.com/gofiber/fiber/v2"
 )
 
-func GetFullYearGddValues(c *fiber.Ctx, request models.GddRequest) models.GddResponse {
+func GetFullYearGddValues(ctx common.DawnCtx, request models.GddRequest) models.GddResponse {
 	product := enums.GetProductFromString(request.Product)
 	var gdds entities.Gdd
 	if request.Year == time.Now().Year() {
-		gdds = persistence.CurrentGddFindFirstByYearAndLocation(request.BuildLocation())
+		gdds = persistence.CurrentGddFindFirstByYearAndLocation(ctx, request.BuildLocation())
 		gdds2 := persistence.CfsFindAllByLocation(request.BuildLocation())
 		gdds.MaxTemps = append(gdds.MaxTemps, gdds2.MaxTemps...)
 		gdds.MinTemps = append(gdds.MinTemps, gdds2.MinTemps...)
@@ -33,11 +31,11 @@ func GetFullYearGddValues(c *fiber.Ctx, request models.GddRequest) models.GddRes
 	return returnGdds
 }
 
-func GetGddValues(ctx context.DawnCtx, request models.GddRequest) models.GddResponse {
+func GetGddValues(ctx common.DawnCtx, request models.GddRequest) models.GddResponse {
 	product := enums.GetProductFromString(request.Product)
 	var gdds entities.Gdd
 	if request.Year == time.Now().Year() {
-		gdds = persistence.CurrentGddFindFirstByYearAndLocation(request.BuildLocation())
+		gdds = persistence.CurrentGddFindFirstByYearAndLocation(ctx, request.BuildLocation())
 	} else {
 		gdds = persistence.GddFindFirstByYearAndLocation(request.Year, request.BuildLocation())
 	}
diff --git a/services/seed_service.go b/services/seed_service.go
index c64717e..2309962 100644
--- a/services/seed_service.go
+++ b/services/seed_service.go
@@ -1,7 +1,8 @@
 package services
 
 import (
-	DawnErrors "dawn-weather/errors"
+	"dawn-weather/common"
+	"dawn-weather/config"
 	"dawn-weather/models"
 	"dawn-weather/models/enums"
 	"dawn-weather/persistence"
@@ -15,7 +16,7 @@ import (
 func GetSeedList(c *fiber.Ctx, request models.SeedListRequest) models.SeedListResponse {
 	product := enums.GetProductFromString(request.Product)
 	if product.Name != enums.ProductType.CORN.Name && product.Name != enums.ProductType.SOYBEAN.Name {
-		panic(DawnErrors.INVALID_PRODUCT(request.Product))
+		panic(config.INVALID_PRODUCT(request.Product))
 	}
 	seeds := persistence.FindSeeds(product.Name)
 	var results []string
@@ -25,11 +26,11 @@ func GetSeedList(c *fiber.Ctx, request models.SeedListRequest) models.SeedListRe
 	return models.SeedListResponse{Seeds: results}
 }
 
-func GetCornMaturityDate(c *fiber.Ctx, request models.CornMaturityRequest) models.CornMaturityResponse {
+func GetCornMaturityDate(ctx common.DawnCtx, request models.CornMaturityRequest) models.CornMaturityResponse {
 
 	seed := persistence.FindSeed(request.Seed)
 	if seed.Type != "corn" {
-		panic(DawnErrors.SEED_TYPE_MISMATCH(request.Seed, "corn"))
+		panic(config.SEED_TYPE_MISMATCH(request.Seed, "corn"))
 	}
 
 	gddRequest := models.GddRequest{
@@ -40,7 +41,7 @@ func GetCornMaturityDate(c *fiber.Ctx, request models.CornMaturityRequest) model
 		Accumulate: false,
 	}
 
-	gdds := GetFullYearGddValues(c, gddRequest)
+	gdds := GetFullYearGddValues(ctx, gddRequest)
 	closestValue := 0.0
 	closestIdx := 0
 	gdus := 0.0
-- 
GitLab