diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5cda30d..d2945b0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,7 @@ name: Test on: - pull-request: + push: branches-ignore: main workflow_call: diff --git a/go.mod b/go.mod index 6dbaea2..882efab 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/go-chi/chi/v5 v5.1.0 github.com/go-chi/render v1.0.3 github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 + github.com/montanaflynn/stats v0.7.1 ) require github.com/ajg/form v1.5.1 // indirect diff --git a/internal/resource/emissions.go b/internal/resource/emissions.go index 2179dbc..e507025 100644 --- a/internal/resource/emissions.go +++ b/internal/resource/emissions.go @@ -6,6 +6,7 @@ import ( "encoding/json" "github.com/go-chi/chi/v5" "github.com/go-chi/render" + "github.com/montanaflynn/stats" "net/http" ) @@ -14,23 +15,28 @@ type EmissionResource struct { } type airPollutionResponse struct { - Average float64 `json:"average"` - Median float64 `json:"median"` - Variance float64 `json:"variance"` + Average float64 `json:"average"` + Median float64 `json:"median"` + StandardDeviation float64 `json:"standard_deviation"` } func newAirPollutionResponse(emissions []*model.Emissions, f func(emission *model.Emissions) float64) airPollutionResponse { total := 0.0 + values := make([]float64, len(emissions)) - for _, emission := range emissions { + for i, emission := range emissions { current := f(emission) + values[i] = current total = total + current } + median, _ := stats.Median(values) + standardDeviation, _ := stats.StandardDeviation(values) + return airPollutionResponse{ - Average: total / float64(len(emissions)), - Median: 0.0, // TODO - Variance: 0.0, // TODO + Average: total / float64(len(emissions)), + Median: median, + StandardDeviation: standardDeviation, } }