diff --git a/internal/router/farmer.go b/internal/router/farmer.go index 5d44c2f..f701cce 100644 --- a/internal/router/farmer.go +++ b/internal/router/farmer.go @@ -1,6 +1,8 @@ package router import ( + "strconv" + "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" @@ -51,6 +53,22 @@ func (r *RouterContainer) bootstrapFarmerSurveyRoute() { return apis.NewBadRequestError("Failed to read request data", err) } + budgetSplit, err := validatePercentage(requestData.CropsProtectionExpenditurePercentage, requestData.FertilizerExpenditurePercentage, requestData.SeedsExpenditurePercentage) + if err != nil { + return apis.NewBadRequestError("Could not validate budget split percentage", err) + } + if !budgetSplit { + return apis.NewNotFoundError("Budget split percentage should add up to 100% ", err) + } + + fertilizerSplit, err := validatePercentage(requestData.SyntheticFertilizersExpenditurePercentage, requestData.NaturalFertilizersExpenditure) + if err != nil { + return apis.NewBadRequestError("Could not validate fertilizer split percentage", err) + } + if !fertilizerSplit { + return apis.NewNotFoundError("Fertilizer split percentage should add up to 100% ", err) + } + if err := r.PB.Dao().RunInTransaction(func(txDao *daos.Dao) error { userRecord, err := r.PB.Dao().FindFirstRecordByData("users", "phone", requestData.Phone) if err != nil { @@ -211,3 +229,15 @@ func (r *RouterContainer) bootstrapFarmerSurveyRoute() { return nil }) } + +func validatePercentage(inputs ...string) (bool, error) { + sum := 0 + for _, numStr := range inputs { + num, err := strconv.Atoi(numStr) + if err != nil { + return false, err + } + sum += num + } + return sum == 100, nil +}