From 431d94660d47d88d1e3bd0420c4691403ff4da1a Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Sat, 4 Oct 2025 12:23:06 -0400 Subject: [PATCH] Added ability to edit benchmark parameters --- templates/benchmark/edit.tmpl | 38 ++++++++++++++++++++++++++++++++ templates/benchmark/view.tmpl | 4 ++++ web/routes.go | 3 +++ web/routes/benchmark.go | 41 +++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 templates/benchmark/edit.tmpl 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" . }} + +
+

Editing Benchmark: {{ .benchmark.Name }}

+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ + +
+
+ +{{ template "footer" . }} diff --git a/templates/benchmark/view.tmpl b/templates/benchmark/view.tmpl index 12edddf..ce7e709 100644 --- a/templates/benchmark/view.tmpl +++ b/templates/benchmark/view.tmpl @@ -3,8 +3,12 @@

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