-
+
-
+
-
+
-
+
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))
+}