add item adding/viewing

This commit is contained in:
2025-03-02 20:29:38 +01:00
parent ba5dbae5eb
commit 31f4422739
3 changed files with 77 additions and 4 deletions

View File

@@ -21,6 +21,9 @@ type CRUDController interface {
type ShopItemController interface {
CRUDController
ShopItemView(*gin.Context)
AddItemView(*gin.Context)
AddItemHandler(*gin.Context)
}
type shopItemController struct {}
@@ -113,6 +116,57 @@ func (rc *shopItemController) Delete(c *gin.Context) {
ReplyOK(c, "shopItem was deleted")
}
func (rc *shopItemController) ShopItemView(c *gin.Context) {
shopItem, err := repositories.ShopItems.GetById(c.Param("id"))
data := CreateSessionData(c, gin.H{
"shopItem": shopItem,
})
if err != nil {
c.HTML(http.StatusBadRequest, "shopitem.html", data)
}
c.HTML(http.StatusOK, "shopitem.html", data)
}
func (rc *shopItemController) AddItemView(c *gin.Context) {
data := CreateSessionData(c, gin.H{
"error": "",
"success": "",
})
c.HTML(http.StatusOK, "additem.html", data)
}
func (rc *shopItemController) AddItemHandler(c *gin.Context) {
shopItem, err := models.NewShopItem(c)
if err != nil {
ReplyError(c, err)
}
_, err = repositories.ShopItems.Create(shopItem)
if err != nil {
data := CreateSessionData(c, gin.H{
"error": err,
"success": "",
})
c.HTML(http.StatusOK, "additem.html", data)
return
}
data := CreateSessionData(c, gin.H{
"error": "",
"success": fmt.Sprintf("Item '%s' Registered", shopItem.Name),
})
c.HTML(http.StatusOK, "additem.html", data)
}
func ReplyError(ctx *gin.Context, err error) {
ctx.JSON(http.StatusBadRequest, gin.H{ "error": err.Error() })
}

View File

@@ -74,13 +74,16 @@ func main() {
viewRoutes := server.Group("/", authValidator.OptionalAuth)
{
viewRoutes.GET("/", userController.MainView)
viewRoutes.GET("/shopitems/:id", shopItemController.ShopItemView)
//write middleware that redirects to homescreen on register/login/reset for logged in users
viewRoutes.GET("/login", userController.LoginView)
viewRoutes.GET("/logout", userController.Logout)
viewRoutes.GET("/register", userController.RegisterView)
viewRoutes.GET("/passwordreset", userController.ResetView)
viewRoutes.GET("/additem", authValidator.RequireAuth, shopItemController.AddItemView)
viewRoutes.POST("/login", userController.LoginHandler)
viewRoutes.POST("/register", userController.RegisterHandler)
viewRoutes.POST("/additem", authValidator.RequireAuth, shopItemController.AddItemHandler)
viewRoutes.POST("/passwordreset", userController.ResetHandler)
}

View File

@@ -1,6 +1,8 @@
package models
import (
"fmt"
"strconv"
"gorm.io/gorm"
"github.com/gin-gonic/gin"
)
@@ -15,11 +17,25 @@ type ShopItem struct {
}
func NewShopItem(ctx *gin.Context) (ShopItem, error) {
var shopItem ShopItem
err := ctx.ShouldBindJSON(&shopItem)
name := ctx.PostForm("name")
description := ctx.PostForm("description")
priceStr := ctx.PostForm("price")
if err != nil {
return ShopItem{}, err
// Convert the price string to float64
price, err := strconv.ParseFloat(priceStr, 64)
if err != nil {
return ShopItem{}, fmt.Errorf("Could not parse price")
}
shopItem := ShopItem{
Name: name,
Description: description,
Price: price,
IsPublic: true,
}
if name == "" || description == "" {
return ShopItem{}, fmt.Errorf("Name or description empty")
}
return shopItem, nil