diff --git a/templates/benchmark/create.tmpl b/templates/benchmark/create.tmpl new file mode 100644 index 0000000..63018c6 --- /dev/null +++ b/templates/benchmark/create.tmpl @@ -0,0 +1,38 @@ +{{ template "header" . }} + +
+

Add new benchmark

+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ + +
+
+ +{{ template "footer" . }} diff --git a/templates/benchmark/list.tmpl b/templates/benchmark/list.tmpl new file mode 100644 index 0000000..2cb60b9 --- /dev/null +++ b/templates/benchmark/list.tmpl @@ -0,0 +1,27 @@ +{{ template "header" . }} + +
+

Benchmark

+ Add new benchmark + + + + + + + + + + + {{ range $h := .benchmark }} + + + + + + {{ end }} + +
NameCreated atLast updated
{{ $h.Name }}{{ $h.CreatedAt.Format "01/02/2006 15:04am" }}{{ $h.UpdatedAt.Format "01/02/2006 15:04am" }}
+
+ +{{ template "footer" . }} diff --git a/templates/benchmark/view.tmpl b/templates/benchmark/view.tmpl new file mode 100644 index 0000000..12edddf --- /dev/null +++ b/templates/benchmark/view.tmpl @@ -0,0 +1,19 @@ +{{ template "header" . }} + +
+

{{ .benchmark.Name }}

+ +

{{ .benchmark.ScoringType }}

+ +
+ +

Latest Benchmark Results:

+ +

There are currently no results recorded using this benchmark.

+ +
+ +

Back

+
+ +{{ template "footer" . }} diff --git a/web/forms/benchmark.go b/web/forms/benchmark.go new file mode 100644 index 0000000..6b43f08 --- /dev/null +++ b/web/forms/benchmark.go @@ -0,0 +1,7 @@ +package forms + +type BenchmarkForm struct { + Name string `form:"benchmark_name" validate:"required"` + ScoringType string `form:"benchmark_scoring" validate:"required"` + Description string `form:"benchmark_description"` +} diff --git a/web/routes.go b/web/routes.go index 66ae07b..69cef84 100644 --- a/web/routes.go +++ b/web/routes.go @@ -26,6 +26,20 @@ func RegisterRoutes(f *flamego.Flame) { f.Get("/{hardware_id}", routes.HardwareGetView) }) + // benchmark routes + f.Group("/benchmark", func() { + f.Get("", func(c flamego.Context) { + c.Redirect("/benchmark/list") + }) + + f.Get("/list", routes.BenchmarkGetList) + + f.Get("/create", routes.BenchmarkGetCreate) + f.Post("/create", binding.Form(forms.BenchmarkForm{}), routes.BenchmarkPostCreate) + + f.Get("/{benchmark_id}", routes.BenchmarkGetView) + }) + // test routes f.Group("/test", func() { f.Get("", func(c flamego.Context) { diff --git a/web/routes/benchmark.go b/web/routes/benchmark.go new file mode 100644 index 0000000..2e02911 --- /dev/null +++ b/web/routes/benchmark.go @@ -0,0 +1,65 @@ +package routes + +import ( + "fmt" + "log" + "net/http" + + "github.com/flamego/binding" + "github.com/flamego/flamego" + "github.com/flamego/template" + "github.com/flamego/validator" + + "git.metaunix.net/bitgoblin/blt/models" + "git.metaunix.net/bitgoblin/blt/web/forms" +) + +func HardwareGetList(t template.Template, data template.Data) { + // add hardwares to template + var hardware []models.Hardware + models.DB.First(&hardware) + data["hardware"] = hardware + + data["title"] = "List of Hardware" + t.HTML(http.StatusOK, "hardware/list") +} + +func HardwareGetView(c flamego.Context, t template.Template, data template.Data) { + // find hardware ID from request + hardwareID := c.Param("hardware_id") + + // find hardware from DB + var hardware models.Hardware + models.DB.Find(&hardware, hardwareID) + data["hardware"] = hardware + + data["title"] = hardware.Name + t.HTML(http.StatusOK, "hardware/view") +} + +func HardwareGetCreate(t template.Template, data template.Data) { + data["title"] = "Add New Hardware" + t.HTML(http.StatusOK, "hardware/create") +} + +func HardwarePostCreate(c flamego.Context, form forms.HardwareForm, 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) + } + + hardware := models.Hardware{ + Name: form.Name, + Type: form.Type, + } + + _ = models.DB.Create(&hardware) + + c.Redirect(fmt.Sprintf("/hardware/%d", hardware.ID)) +} diff --git a/web/routes/hardware.go b/web/routes/hardware.go index 2e02911..88ad512 100644 --- a/web/routes/hardware.go +++ b/web/routes/hardware.go @@ -15,13 +15,13 @@ import ( ) func HardwareGetList(t template.Template, data template.Data) { - // add hardwares to template - var hardware []models.Hardware - models.DB.First(&hardware) - data["hardware"] = hardware + // add benchmarks to template + var benchmarks []models.Benchmark + models.DB.First(&benchmarks) + data["benchmarks"] = benchmarks - data["title"] = "List of Hardware" - t.HTML(http.StatusOK, "hardware/list") + data["title"] = "List of Benchmarks" + t.HTML(http.StatusOK, "benchmark/list") } func HardwareGetView(c flamego.Context, t template.Template, data template.Data) {