From 4ad9a9230603d298defd5fcc5a0624a3e3e4fdef Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Sat, 2 Dec 2023 22:37:46 -0500 Subject: [PATCH] Added hardware routes and views --- models/hardware.go | 1 - templates/hardware/create.tmpl | 34 ++++++++++++++++++++++ templates/hardware/list.tmpl | 27 ++++++++++++++++++ templates/hardware/view.tmpl | 13 +++++++++ web/forms/hardware.go | 6 ++++ web/routes.go | 12 ++++++++ web/routes/hardware.go | 52 ++++++++++++++++++++++++++++++++++ 7 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 templates/hardware/create.tmpl create mode 100644 templates/hardware/list.tmpl create mode 100644 templates/hardware/view.tmpl create mode 100644 web/forms/hardware.go create mode 100644 web/routes/hardware.go diff --git a/models/hardware.go b/models/hardware.go index ba6d46a..a0eb436 100644 --- a/models/hardware.go +++ b/models/hardware.go @@ -8,7 +8,6 @@ type Hardware struct { gorm.Model Name string Type string - Description string // has many tests Tests[] Test diff --git a/templates/hardware/create.tmpl b/templates/hardware/create.tmpl new file mode 100644 index 0000000..67fa97c --- /dev/null +++ b/templates/hardware/create.tmpl @@ -0,0 +1,34 @@ +{{ template "header" . }} + +
+

Add new hardware

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

Hardware

+ Add new hardware + + + + + + + + + + + {{ range $h := .hardware }} + + + + + + {{ 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/hardware/view.tmpl b/templates/hardware/view.tmpl new file mode 100644 index 0000000..907f5a1 --- /dev/null +++ b/templates/hardware/view.tmpl @@ -0,0 +1,13 @@ +{{ template "header" . }} + +
+

{{ .hardware.Name }}

+ +

{{ .hardware.Type }}

+ +
+ +

Back

+
+ +{{ template "footer" . }} diff --git a/web/forms/hardware.go b/web/forms/hardware.go new file mode 100644 index 0000000..ea267e3 --- /dev/null +++ b/web/forms/hardware.go @@ -0,0 +1,6 @@ +package forms + +type HardwareForm struct { + Name string `form:"hardware_name" validate:"required"` + Type string `form:"hardware_type" validate:"required"` +} diff --git a/web/routes.go b/web/routes.go index 51f5162..c507aa1 100644 --- a/web/routes.go +++ b/web/routes.go @@ -12,6 +12,18 @@ func RegisterRoutes(f *flamego.Flame) { // index routes f.Get("/", routes.GetDashboard) + // hardware routes + f.Group("/hardware", func() { + f.Get("", func(c flamego.Context) { + c.Redirect("/hardware/list") + }) + + f.Get("/list", routes.HardwareGetList) + + f.Get("/create", routes.HardwareGetCreate) + f.Post("/create", binding.Form(forms.HardwareForm{}), routes.HardwarePostCreate) + }) + // test routes f.Group("/test", func() { f.Get("", func(c flamego.Context) { diff --git a/web/routes/hardware.go b/web/routes/hardware.go new file mode 100644 index 0000000..7bc254a --- /dev/null +++ b/web/routes/hardware.go @@ -0,0 +1,52 @@ +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.Find(&hardware) + data["hardware"] = hardware + + data["title"] = "List of Hardware" + t.HTML(http.StatusOK, "hardware/list") +} + +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)) +}