diff --git a/data.go b/data.go index 41578ab..ad08e7c 100644 --- a/data.go +++ b/data.go @@ -1,5 +1,7 @@ package main +import "gitea.seeseepuff.be/seeseemelk/mysqlite" + func (a *App) GetAllBrands() ([]string, error) { var brands []string var err error @@ -59,3 +61,17 @@ func (a *App) GetTotalRamCapacity() (int, error) { err := a.db.Query("SELECT SUM(capacity) FROM info_ram").ScanSingle(&capacity) return capacity, err } + +func (a *App) DeleteAsset(tx *mysqlite.Tx, qr int) error { + err := tx.Query("DELETE FROM assets WHERE qr=?").Bind(qr).Exec() + if err != nil { + return err + } + + err = tx.Query("DELETE FROM info_ram WHERE asset=?").Bind(qr).Exec() + if err != nil { + return err + } + + return nil +} diff --git a/main.go b/main.go index 23f693a..2567272 100644 --- a/main.go +++ b/main.go @@ -67,6 +67,8 @@ func main() { r.GET("/create", app.getCreateDevice) r.POST("/create", app.postCreateDevice) r.GET("/browse", app.getBrowse) + r.GET("/delete", app.getDelete) + r.POST("/delete", app.postDelete) err = r.Run() if err != nil { log.Fatalf("error serving website: %v", err) diff --git a/templates/delete.gohtml b/templates/delete.gohtml new file mode 100644 index 0000000..2f955c5 --- /dev/null +++ b/templates/delete.gohtml @@ -0,0 +1,9 @@ +{{- /*gotype: pcinv.DeleteVM*/ -}} +{{define "delete"}} +{{template "header" "Delete Device"}} +

Are you sure you want to delete this device?

+
+ + +{{template "footer"}} +{{end}} diff --git a/templates/device.gohtml b/templates/device.gohtml index 6de071c..9bd9d9c 100644 --- a/templates/device.gohtml +++ b/templates/device.gohtml @@ -30,5 +30,6 @@ {{end}} + {{template "footer"}} {{end}} diff --git a/views.go b/views.go index d413681..797200e 100644 --- a/views.go +++ b/views.go @@ -225,15 +225,7 @@ func (a *App) postCreateDeviceRam(c *gin.Context, qr int) error { return err } - err = tx.Query("DELETE FROM assets WHERE qr=?").Bind(qr).Exec() - if err != nil { - return err - } - - err = tx.Query("DELETE FROM info_ram WHERE asset=?").Bind(qr).Exec() - if err != nil { - return err - } + err = a.DeleteAsset(tx, qr) err = tx.Query("INSERT INTO assets (qr, type, brand, name, description) VALUES (?, ?, ?, ?, ?)"). Bind(qr, c.PostForm("asset_type"), c.PostForm("asset_brand"), c.PostForm("asset_name"), c.PostForm("asset_description")). @@ -306,6 +298,46 @@ func (a *App) getBrowse(c *gin.Context) { c.HTML(http.StatusOK, "browse", vm) } +type DeleteVM struct { + Qr int +} + +func (a *App) getDelete(c *gin.Context) { + qr, err := strconv.Atoi(c.Query("id")) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid qr: %v", err)) + return + } + vm := &DeleteVM{Qr: qr} + c.HTML(http.StatusOK, "delete", vm) +} + +func (a *App) postDelete(c *gin.Context) { + qr, err := strconv.Atoi(c.Query("id")) + if err != nil { + c.AbortWithError(http.StatusBadRequest, fmt.Errorf("invalid qr: %v", err)) + return + } + tx, err := a.db.Begin() + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + err = a.DeleteAsset(tx, qr) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + + err = tx.Commit() + if err != nil { + c.AbortWithError(http.StatusInternalServerError, err) + return + } + c.Redirect(http.StatusSeeOther, "/") +} + func placeholders(count int) string { if count == 0 { return ""