item put functionality

This commit is contained in:
2024-03-10 05:17:46 +00:00
parent 01f25d4f71
commit 95171706da
7 changed files with 275 additions and 78 deletions

View File

@@ -22,21 +22,21 @@ const (
// entities // entities
type Item struct { type Item struct {
ID int ID int `json:"id"`
Name string Name string `json:"name"`
Notes *string Notes *string `json:"notes"`
Description *string Description *string `json:"description"`
Stage PackingStage Stage PackingStage `json:"stage"`
Category Category Category Category `json:"category"`
} }
type Box struct { type Box struct {
ID int ID int `json:"id"`
Name string Name string `json:"name"`
Notes *string Notes *string `json:"notes"`
Description *string Description *string `json:"description"`
Stage PackingStage Stage PackingStage `json:"stage"`
Category Category Category Category `json:"category"`
} }
// joins // joins

199
db/sql.go
View File

@@ -38,61 +38,6 @@ func GetAllItems() (result []Item, err error) {
return 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) { func GetAllBoxes() (result []Box, err error) {
db, err := CreateClient() db, err := CreateClient()
if err != nil { if err != nil {
@@ -123,6 +68,150 @@ func GetAllBoxes() (result []Box, err error) {
return 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) { // func PostBoxItem(itemid int, boxid int) (int64, error) {
// db, err := CreateClient() // db, err := CreateClient()
// if err != nil { // if err != nil {

View File

@@ -51,13 +51,16 @@ func main() {
router.Handle("/items/save", web.Action(itemActions.Save)) router.Handle("/items/save", web.Action(itemActions.Save))
router.Handle("/items/edit/", web.Action(itemActions.Edit)) router.Handle("/items/edit/", web.Action(itemActions.Edit))
router.Handle("/items/delete/", web.Action(itemActions.Delete)) 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/", web.Action(itemActions.Save))
router.Handle("/items/save/:id", web.Action(itemActions.Save))
router.Handle("/items", web.Action(itemActions.Get)) 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", web.Action(boxActions.GetAll))
router.Handle("/items/", web.Action(itemActions.Get)) 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/", web.Action(boxActions.GetAll))
router.Handle("/boxes/:id", web.Action(boxActions.GetAll))
router.Handle("/", web.Action(routes.HomePage)) router.Handle("/", web.Action(routes.HomePage))
router.Handle("/index.html", web.Action(routes.HomePage)) router.Handle("/index.html", web.Action(routes.HomePage))

View File

@@ -10,22 +10,22 @@ import (
) )
type ItemActions struct { type ItemActions struct {
Get func(r *http.Request) *web.Response Get func(r *http.Request) *web.Response
GetAll func(r *http.Request) *web.Response GetAll func(r *http.Request) *web.Response
Edit func(r *http.Request) *web.Response Edit func(r *http.Request) *web.Response
Delete func(r *http.Request) *web.Response Delete func(r *http.Request) *web.Response
Save func(r *http.Request) *web.Response Save func(r *http.Request) *web.Response
} }
func Items(_html *template.Template) *ItemActions { func Items(_html *template.Template) *ItemActions {
html = _html html = _html
return &ItemActions{ return &ItemActions{
Get: Get, Get: Get,
GetAll: GetAllItems, GetAll: GetAllItems,
Edit: EditItem, Edit: EditItem,
Delete: nil, Delete: nil,
Save: nil, Save: Put,
} }
} }
@@ -99,3 +99,82 @@ func GetItemByID(r *http.Request) *web.Response {
nil, 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: &notes,
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,
)
}

View File

@@ -1,5 +1,8 @@
<tr id="datarow-{{.ID}}" class="border-b dark:border-neutral-500"> <tr id="datarow-{{.ID}}" class="datarow border-b dark:border-neutral-500">
<td class="whitespace-nowrap px-6 py-4">{{.ID}}</td> <td class="whitespace-nowrap px-6 py-4">
<input hidden disabled type="text" name="id" value="{{.ID}}" data-include-edit="{{.ID}}" />
<span>{{.ID}}</span>
</td>
<td class="whitespace-nowrap px-6 py-4"> <td class="whitespace-nowrap px-6 py-4">
<input <input
type="text" type="text"

View File

@@ -2,7 +2,7 @@
<td class="whitespace-nowrap px-6 py-4">{{.ID}}</td> <td class="whitespace-nowrap px-6 py-4">{{.ID}}</td>
<td class="whitespace-nowrap px-6 py-4">{{.Name}}</td> <td class="whitespace-nowrap px-6 py-4">{{.Name}}</td>
<td class="whitespace-nowrap px-6 py-4">{{.Stage}}</td> {{ template "parsed-packing-stage.html" .Stage }}
{{ template "parsed-category.html" .Category }} {{ template "parsed-category.html" .Category }}

View File

@@ -0,0 +1,23 @@
<td class="whitespace-nowrap px-6 py-4">
{{ if eq . 0 }}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800 bg-">
Essentials
</span>
{{ else if eq . 1 }}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-cyan-100 text-cyan-800">
Stage One
</span>
{{ else if eq . 2 }}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-purple-100 text-purple-800">
Stage Two
</span>
{{ else if eq . 3 }}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-stone-100 text-stone-800">
Stage Three
</span>
{{ else }}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-amber-100 text-amber-800">
Determine Later
</span>
{{ end }}
</td>