From 58e21a3b7c90d4676ec0022d10a6a07b3c1d9bba Mon Sep 17 00:00:00 2001 From: patrick Date: Sun, 1 Mar 2020 21:49:00 +1100 Subject: [PATCH] db skeleton --- form/Edit.tmpl | 12 ++++ form/Footer.tmpl | 4 ++ form/Header.tmpl | 10 +++ form/Menu.tmpl | 4 ++ form/New.tmpl | 11 ++++ form/Show.tmpl | 8 +++ form/index.tmpl | 30 +++++++++ main.go | 162 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 241 insertions(+) create mode 100644 form/Edit.tmpl create mode 100644 form/Footer.tmpl create mode 100644 form/Header.tmpl create mode 100644 form/Menu.tmpl create mode 100644 form/New.tmpl create mode 100644 form/Show.tmpl create mode 100644 form/index.tmpl create mode 100644 main.go diff --git a/form/Edit.tmpl b/form/Edit.tmpl new file mode 100644 index 0000000..ef97a63 --- /dev/null +++ b/form/Edit.tmpl @@ -0,0 +1,12 @@ +{{ define "Edit" }} + {{ template "Header" }} + {{ template "Menu" }} +

Edit Name and City

+
+ +
+
+ +

+ {{ template "Footer" }} +{{ end }} \ No newline at end of file diff --git a/form/Footer.tmpl b/form/Footer.tmpl new file mode 100644 index 0000000..8108a15 --- /dev/null +++ b/form/Footer.tmpl @@ -0,0 +1,4 @@ +{{ define "Footer" }} + + +{{ end }} \ No newline at end of file diff --git a/form/Header.tmpl b/form/Header.tmpl new file mode 100644 index 0000000..1b10002 --- /dev/null +++ b/form/Header.tmpl @@ -0,0 +1,10 @@ +{{ define "Header" }} + + + + Golang Mysql Curd Example + + + +

Golang Mysql Curd Example

+{{ end }} \ No newline at end of file diff --git a/form/Menu.tmpl b/form/Menu.tmpl new file mode 100644 index 0000000..a6c38a0 --- /dev/null +++ b/form/Menu.tmpl @@ -0,0 +1,4 @@ +{{ define "Menu" }} +HOME | +NEW +{{ end }} \ No newline at end of file diff --git a/form/New.tmpl b/form/New.tmpl new file mode 100644 index 0000000..9cb1496 --- /dev/null +++ b/form/New.tmpl @@ -0,0 +1,11 @@ +{{ define "New" }} + {{ template "Header" }} + {{ template "Menu" }} +

New Name and City

+
+
+
+ +
+ {{ template "Footer" }} +{{ end }}c \ No newline at end of file diff --git a/form/Show.tmpl b/form/Show.tmpl new file mode 100644 index 0000000..32e3856 --- /dev/null +++ b/form/Show.tmpl @@ -0,0 +1,8 @@ +{{ define "Show" }} + {{ template "Header" }} + {{ template "Menu" }} +

Register {{ .Id }}

+

Name: {{ .Name }}

+

City: {{ .City }}


Edit

+ {{ template "Footer" }} +{{ end }} \ No newline at end of file diff --git a/form/index.tmpl b/form/index.tmpl new file mode 100644 index 0000000..37978af --- /dev/null +++ b/form/index.tmpl @@ -0,0 +1,30 @@ +{{ define "Index" }} + {{ template "Header" }} + {{ template "Menu" }} +

Registered

+ + + + + + + + + + + + + {{ range . }} + + + + + + + + {{ end }} + +
IDNameCityViewEditDelete
{{ .Id }} {{ .Name }} {{ .City }} ViewEditDelete +
+ {{ template "Footer" }} +{{ end }} \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..9d4a7c8 --- /dev/null +++ b/main.go @@ -0,0 +1,162 @@ +package main + +import ( + "database/sql" + "log" + "net/http" + "text/template" + + _ "github.com/go-sql-driver/mysql" +) + +type Employee struct { + Id int + Name string + City string +} + +func dbConn() (db *sql.DB) { + dbDriver := "mysql" + dbUser := "sp" + dbPass := "sp" + dbName := "goblog" + db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) + if err != nil { + panic(err.Error()) + } + return db +} + +var tmpl = template.Must(template.ParseGlob("form/*")) + +func Index(w http.ResponseWriter, r *http.Request) { + db := dbConn() + selDB, err := db.Query("SELECT * FROM Employee ORDER BY id DESC") + if err != nil { + panic(err.Error()) + } + emp := Employee{} + res := []Employee{} + for selDB.Next() { + var id int + var name, city string + err = selDB.Scan(&id, &name, &city) + if err != nil { + panic(err.Error()) + } + emp.Id = id + emp.Name = name + emp.City = city + res = append(res, emp) + } + tmpl.ExecuteTemplate(w, "Index", res) + defer db.Close() +} + +func Show(w http.ResponseWriter, r *http.Request) { + db := dbConn() + nId := r.URL.Query().Get("id") + selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) + if err != nil { + panic(err.Error()) + } + emp := Employee{} + for selDB.Next() { + var id int + var name, city string + err = selDB.Scan(&id, &name, &city) + if err != nil { + panic(err.Error()) + } + emp.Id = id + emp.Name = name + emp.City = city + } + tmpl.ExecuteTemplate(w, "Show", emp) + defer db.Close() +} + +func New(w http.ResponseWriter, r *http.Request) { + tmpl.ExecuteTemplate(w, "New", nil) +} + +func Edit(w http.ResponseWriter, r *http.Request) { + db := dbConn() + nId := r.URL.Query().Get("id") + selDB, err := db.Query("SELECT * FROM Employee WHERE id=?", nId) + if err != nil { + panic(err.Error()) + } + emp := Employee{} + for selDB.Next() { + var id int + var name, city string + err = selDB.Scan(&id, &name, &city) + if err != nil { + panic(err.Error()) + } + emp.Id = id + emp.Name = name + emp.City = city + } + tmpl.ExecuteTemplate(w, "Edit", emp) + defer db.Close() +} + +func Insert(w http.ResponseWriter, r *http.Request) { + db := dbConn() + if r.Method == "POST" { + name := r.FormValue("name") + city := r.FormValue("city") + insForm, err := db.Prepare("INSERT INTO Employee(name, city) VALUES(?,?)") + if err != nil { + panic(err.Error()) + } + insForm.Exec(name, city) + log.Println("INSERT: Name: " + name + " | City: " + city) + } + defer db.Close() + http.Redirect(w, r, "/", 301) +} + +func Update(w http.ResponseWriter, r *http.Request) { + db := dbConn() + if r.Method == "POST" { + name := r.FormValue("name") + city := r.FormValue("city") + id := r.FormValue("uid") + insForm, err := db.Prepare("UPDATE Employee SET name=?, city=? WHERE id=?") + if err != nil { + panic(err.Error()) + } + insForm.Exec(name, city, id) + log.Println("UPDATE: Name: " + name + " | City: " + city) + } + defer db.Close() + http.Redirect(w, r, "/", 301) +} + +func Delete(w http.ResponseWriter, r *http.Request) { + db := dbConn() + emp := r.URL.Query().Get("id") + delForm, err := db.Prepare("DELETE FROM Employee WHERE id=?") + if err != nil { + panic(err.Error()) + } + delForm.Exec(emp) + log.Println("DELETE") + defer db.Close() + http.Redirect(w, r, "/", 301) +} + +func main() { + log.Println("Server started on: http://localhost:8080") + http.HandleFunc("/", Index) + http.HandleFunc("/show", Show) + http.HandleFunc("/new", New) + http.HandleFunc("/edit", Edit) + http.HandleFunc("/insert", Insert) + http.HandleFunc("/update", Update) + http.HandleFunc("/delete", Delete) + http.ListenAndServe(":8080", nil) +}