From 95171706dafbd0f5f4a51f1f407124337dfedfb7 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Sun, 10 Mar 2024 05:17:46 +0000 Subject: [PATCH] item put functionality --- db/entities.go | 24 ++-- db/sql.go | 199 ++++++++++++++++++++-------- main.go | 5 +- routes/items.go | 93 ++++++++++++- templates/entity-edit.html | 7 +- templates/entity-row.html | 2 +- templates/parsed-packing-stage.html | 23 ++++ 7 files changed, 275 insertions(+), 78 deletions(-) create mode 100644 templates/parsed-packing-stage.html diff --git a/db/entities.go b/db/entities.go index e2c2798..214b15b 100644 --- a/db/entities.go +++ b/db/entities.go @@ -22,21 +22,21 @@ const ( // entities type Item struct { - ID int - Name string - Notes *string - Description *string - Stage PackingStage - Category Category + ID int `json:"id"` + Name string `json:"name"` + Notes *string `json:"notes"` + Description *string `json:"description"` + Stage PackingStage `json:"stage"` + Category Category `json:"category"` } type Box struct { - ID int - Name string - Notes *string - Description *string - Stage PackingStage - Category Category + ID int `json:"id"` + Name string `json:"name"` + Notes *string `json:"notes"` + Description *string `json:"description"` + Stage PackingStage `json:"stage"` + Category Category `json:"category"` } // joins diff --git a/db/sql.go b/db/sql.go index f2def63..03f6dec 100644 --- a/db/sql.go +++ b/db/sql.go @@ -38,61 +38,6 @@ func GetAllItems() (result []Item, err error) { return } -func GetItemByID(id int) (item Item, err error) { - db, err := CreateClient() - if err != nil { - return Item{}, err - } - - defer db.Close() - - row := db.QueryRow("SELECT * FROM items WHERE id = ?", id) - err = row.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) - - return -} - -func PostItem(item Item) (int64, error) { - db, err := CreateClient() - if err != nil { - return -1, err - } - - defer db.Close() - - query := `INSERT INTO items (name, notes, description, stage, category) - VALUES (?, ?, ?, ?, ?)` - - result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category) - - if err != nil { - return -1, err - } - - return result.LastInsertId() -} - - - -func PostBox(box Box) (int64, error) { - db, err := CreateClient() - if err != nil { - return -1, err - } - - defer db.Close() - - query := `INSERT INTO boxes (name, notes, description, stage, category) VALUES (?, ?, ?, ?, ?)` - - result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category) - - if err != nil { - return -1, err - } - - return result.LastInsertId() -} - func GetAllBoxes() (result []Box, err error) { db, err := CreateClient() if err != nil { @@ -123,6 +68,150 @@ func GetAllBoxes() (result []Box, err error) { return } +func GetItemByID(id int) (item Item, err error) { + db, err := CreateClient() + if err != nil { + return Item{}, err + } + + defer db.Close() + + row := db.QueryRow("SELECT * FROM items WHERE id = ?", id) + err = row.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) + + return +} + +func GetBoxByID(id int) (box Box, err error) { + db, err := CreateClient() + if err != nil { + return Box{}, err + } + + defer db.Close() + + row := db.QueryRow("SELECT * FROM boxes WHERE id = ?", id) + err = row.Scan(&box.ID, &box.Name, &box.Notes, &box.Description, &box.Stage, &box.Category) + + return +} + +func PostItem(item Item) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `INSERT INTO items (name, notes, description, stage, category) + VALUES (?, ?, ?, ?, ?)` + + result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category) + + if err != nil { + return -1, err + } + + return result.LastInsertId() +} + +func PostBox(box Box) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `INSERT INTO boxes (name, notes, description, stage, category) VALUES (?, ?, ?, ?, ?)` + + result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category) + + if err != nil { + return -1, err + } + + return result.LastInsertId() +} + +func PutItem(item Item) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `UPDATE items SET name = ?, notes = ?, description = ?, stage = ?, category = ? WHERE id = ?` + + result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category, item.ID) + + if err != nil { + return -1, err + } + + return result.RowsAffected() +} + +func PutBox(box Box) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `UPDATE boxes SET name = ?, notes = ?, description = ?, stage = ?, category = ? WHERE id = ?` + + result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category, box.ID) + + if err != nil { + return -1, err + } + + return result.RowsAffected() +} + +func DeleteItem(id int) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `DELETE FROM items WHERE id = ?` + + result, err := db.Exec(query, id) + + if err != nil { + return -1, err + } + + return result.RowsAffected() +} + +func DeleteBox(id int) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `DELETE FROM boxes WHERE id = ?` + + result, err := db.Exec(query, id) + + if err != nil { + return -1, err + } + + return result.RowsAffected() +} + + // func PostBoxItem(itemid int, boxid int) (int64, error) { // db, err := CreateClient() // if err != nil { diff --git a/main.go b/main.go index daeee2e..6d1b452 100644 --- a/main.go +++ b/main.go @@ -51,13 +51,16 @@ func main() { router.Handle("/items/save", web.Action(itemActions.Save)) router.Handle("/items/edit/", web.Action(itemActions.Edit)) router.Handle("/items/delete/", web.Action(itemActions.Delete)) + router.Handle("/items/delete/:id", web.Action(itemActions.Delete)) router.Handle("/items/save/", web.Action(itemActions.Save)) + router.Handle("/items/save/:id", web.Action(itemActions.Save)) router.Handle("/items", web.Action(itemActions.Get)) - router.Handle("/items/:id", web.Action(itemActions.Get)) router.Handle("/boxes", web.Action(boxActions.GetAll)) router.Handle("/items/", web.Action(itemActions.Get)) + router.Handle("/items/:id", web.Action(itemActions.Get)) router.Handle("/boxes/", web.Action(boxActions.GetAll)) + router.Handle("/boxes/:id", web.Action(boxActions.GetAll)) router.Handle("/", web.Action(routes.HomePage)) router.Handle("/index.html", web.Action(routes.HomePage)) diff --git a/routes/items.go b/routes/items.go index 9fe2d8a..9672d9d 100644 --- a/routes/items.go +++ b/routes/items.go @@ -10,22 +10,22 @@ import ( ) type ItemActions struct { - Get func(r *http.Request) *web.Response - GetAll func(r *http.Request) *web.Response - Edit func(r *http.Request) *web.Response - Delete func(r *http.Request) *web.Response - Save func(r *http.Request) *web.Response + Get func(r *http.Request) *web.Response + GetAll func(r *http.Request) *web.Response + Edit func(r *http.Request) *web.Response + Delete func(r *http.Request) *web.Response + Save func(r *http.Request) *web.Response } func Items(_html *template.Template) *ItemActions { html = _html return &ItemActions{ - Get: Get, + Get: Get, GetAll: GetAllItems, Edit: EditItem, Delete: nil, - Save: nil, + Save: Put, } } @@ -99,3 +99,82 @@ func GetItemByID(r *http.Request) *web.Response { nil, ) } + +func Put(r *http.Request) *web.Response { + id, _ := web.PathLast(r) + + err := r.ParseForm() + if err != nil { + return web.Error(http.StatusBadRequest, err, nil) + } + + name := r.Form.Get("name") + stage := r.Form.Get("stage") + category := r.Form.Get("category") + description := r.Form.Get("description") + notes := r.Form.Get("notes") + // id := r.Form.Get("id") + + item := db.Item{ + ID: func() int { + idInt, err := strconv.ParseInt(id, 10, 64) + + if err != nil { + return -1 + } + + return int(idInt) + }(), + + Name: name, + Description: &description, + Notes: ¬es, + + Stage: func() db.PackingStage { + stageInt, _ := strconv.Atoi(stage) + return db.PackingStage(stageInt) + }(), + + Category: func() db.Category { + categoryInt, _ := strconv.Atoi(category) + return db.Category(categoryInt) + }(), + } + + _, err = db.PutItem(item) + + if err != nil { + return web.Error(http.StatusInternalServerError, err, nil) + } + + return web.HTML( + http.StatusOK, + html, + "entity-row.html", + item, + nil, + ) +} + +func Delete(r *http.Request) *web.Response { + idFromPath, _ := web.PathLast(r) + id, err := strconv.ParseInt(idFromPath, 10, 64) + + if err != nil { + return web.Error(http.StatusBadRequest, err, nil) + } + + _, err = db.DeleteItem(int(id)) + + if err != nil { + return web.Error(http.StatusInternalServerError, err, nil) + } + + return web.HTML( + http.StatusOK, + html, + "entity-row.html", + nil, + nil, + ) +} diff --git a/templates/entity-edit.html b/templates/entity-edit.html index 342538a..87daa2c 100644 --- a/templates/entity-edit.html +++ b/templates/entity-edit.html @@ -1,5 +1,8 @@ - - {{.ID}} + + + + {{.ID}} + {{.ID}} {{.Name}} - {{.Stage}} + {{ template "parsed-packing-stage.html" .Stage }} {{ template "parsed-category.html" .Category }} diff --git a/templates/parsed-packing-stage.html b/templates/parsed-packing-stage.html new file mode 100644 index 0000000..4d4da4f --- /dev/null +++ b/templates/parsed-packing-stage.html @@ -0,0 +1,23 @@ + + {{ if eq . 0 }} + + Essentials + + {{ else if eq . 1 }} + + Stage One + + {{ else if eq . 2 }} + + Stage Two + + {{ else if eq . 3 }} + + Stage Three + + {{ else }} + + Determine Later + + {{ end }} +