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" . }}
+
+
+
+{{ 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
+
+
+
+
+ Name |
+ Created at |
+ Last updated |
+
+
+
+ {{ range $h := .hardware }}
+
+ {{ $h.Name }} |
+ {{ $h.CreatedAt.Format "01/02/2006 15:04am" }} |
+ {{ $h.UpdatedAt.Format "01/02/2006 15:04am" }} |
+
+ {{ end }}
+
+
+
+
+{{ 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))
+}