From 958c72ee63a96dde5ffba3a86d7a6b472a285305 Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Wed, 29 May 2024 11:40:42 -0400 Subject: [PATCH] Added result creation route --- models/result.go | 17 +++++++++-------- templates/test/view.tmpl | 28 ++++++++++++++++++++-------- web/forms/result.go | 10 ++++++++++ web/routes.go | 5 +++++ web/routes/result.go | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 web/forms/result.go create mode 100644 web/routes/result.go diff --git a/models/result.go b/models/result.go index 1706e29..ca00e63 100644 --- a/models/result.go +++ b/models/result.go @@ -6,18 +6,19 @@ import ( type Result struct { gorm.Model - Name string - Description string + AverageScore float + MinimumScore float + MaximumScore float // belongs to Hardware - HardwareID int - Hardware Hardware + HardwareID int + Hardware Hardware // belongs to Benchmark - BenchmarkID int - Benchmark Benchmark + BenchmarkID int + Benchmark Benchmark // belongs to Test - TestID int - Test Test + TestID int + Test Test } diff --git a/templates/test/view.tmpl b/templates/test/view.tmpl index 3f41068..903c15e 100644 --- a/templates/test/view.tmpl +++ b/templates/test/view.tmpl @@ -22,23 +22,35 @@
- +
- +
- +
- +
diff --git a/web/forms/result.go b/web/forms/result.go new file mode 100644 index 0000000..8eedd81 --- /dev/null +++ b/web/forms/result.go @@ -0,0 +1,10 @@ +package forms + +type ResultForm struct { + Test uint `form:"result_test" validate:"required"` + Hardware uint `form:"result_hardware" validate:"required"` + Benchmark uint `form:"result_benchmark" validate:"required"` + AverageScore float `form:"result_avg" validate:"required"` + MinimumScore float `form:"result_min"` + MaximumScore float `form:"result_max"` +} diff --git a/web/routes.go b/web/routes.go index 6a4e9b5..814be42 100644 --- a/web/routes.go +++ b/web/routes.go @@ -53,4 +53,9 @@ func RegisterRoutes(f *flamego.Flame) { f.Get("/{test_id}", routes.TestGetView) }) + + // result routes + f.Group("/result", func() { + f.Post("/add", routes.ResultPostCreate) + }) } diff --git a/web/routes/result.go b/web/routes/result.go new file mode 100644 index 0000000..c41092a --- /dev/null +++ b/web/routes/result.go @@ -0,0 +1,38 @@ +package routes + +import ( + "log" + + "github.com/flamego/binding" + "github.com/flamego/flamego" + "github.com/flamego/validator" + + "git.metaunix.net/bitgoblin/blt/models" + "git.metaunix.net/bitgoblin/blt/web/forms" +) + +func TestPostCreate(c flamego.Context, form forms.ResultForm, errs binding.Errors) { + if len(errs) > 0 { + var err error + switch errs[0].Category { + case binding.ErrorCategoryValidation: + err = errs[0].Err.(validator.ValidationErrors)[0] + default: + err = errs[0].Err + } + log.Fatal(err) + } + + result := models.Result{ + TestID: form.Test, + HardwareID: form.Hardware, + BenchmarkID: form.Benchmark, + AverageScore: form.AverageScore, + MinimumScore: form.MinimumScore, + MaximumScore: form.MaximumScore, + } + + _ = models.DB.Create(&result) + + c.Redirect(fmt.Sprintf("/test/%d", result.TestID)) +}