diff --git a/templates/benchmark/edit.tmpl b/templates/benchmark/edit.tmpl
new file mode 100644
index 0000000..7fc10f9
--- /dev/null
+++ b/templates/benchmark/edit.tmpl
@@ -0,0 +1,38 @@
+{{ template "header" . }}
+
+
{{ .benchmark.Name }}
+
Edit
+
{{ .benchmark.ScoringType }}
+
{{ .benchmark.Description }}
+
Latest Benchmark Results:
diff --git a/web/routes.go b/web/routes.go
index 2dd1dac..4b894a7 100644
--- a/web/routes.go
+++ b/web/routes.go
@@ -41,6 +41,9 @@ func RegisterRoutes(f *flamego.Flame) {
f.Post("/create", binding.Form(forms.BenchmarkForm{}), routes.BenchmarkPostCreate)
f.Get("/{benchmark_id}", routes.BenchmarkGetView)
+
+ f.Get("/{benchmark_id}/edit", routes.BenchmarkGetEdit)
+ f.Post("/{benchmark_id}/edit", binding.Form(forms.BenchmarkForm{}), routes.BenchmarkPostEdit)
})
// test routes
diff --git a/web/routes/benchmark.go b/web/routes/benchmark.go
index 8b06c82..c06488d 100644
--- a/web/routes/benchmark.go
+++ b/web/routes/benchmark.go
@@ -64,3 +64,44 @@ func BenchmarkPostCreate(c flamego.Context, form forms.BenchmarkForm, errs bindi
c.Redirect(fmt.Sprintf("/benchmark/%d", benchmark.ID))
}
+
+func BenchmarkGetEdit(c flamego.Context, t template.Template, data template.Data) {
+ // find benchmark ID from request
+ benchmarkID := c.Param("benchmark_id")
+
+ // find benchmark from DB
+ var benchmark models.Benchmark
+ models.DB.First(&benchmark, benchmarkID)
+ data["benchmark"] = benchmark
+
+ data["title"] = "Editing Benchmark"
+ t.HTML(http.StatusOK, "benchmark/edit")
+}
+
+func BenchmarkPostEdit(c flamego.Context, form forms.BenchmarkForm, 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)
+ }
+
+ // find benchmark ID from request
+ benchmarkID := c.Param("benchmark_id")
+
+ // find benchmark from DB
+ var benchmark models.Benchmark
+ models.DB.First(&benchmark, benchmarkID)
+
+ benchmark.Name = form.Name
+ benchmark.ScoringType = form.ScoringType
+ benchmark.Description = form.Description
+
+ models.DB.Save(&benchmark)
+
+ c.Redirect(fmt.Sprintf("/benchmark/%d", benchmark.ID))
+}