add basic cart
This commit is contained in:
239
controllers/cartItemController.go
Normal file
239
controllers/cartItemController.go
Normal file
@@ -0,0 +1,239 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"example.com/gin/test/models"
|
||||
//"example.com/gin/test/services"
|
||||
"example.com/gin/test/repositories"
|
||||
)
|
||||
|
||||
type CartItemController interface {
|
||||
//CRUDController
|
||||
CartItemView(*gin.Context)
|
||||
AddItemHandler(*gin.Context)
|
||||
//EditCartItemHandler(*gin.Context)
|
||||
//DeleteCartItemHandler(*gin.Context)
|
||||
}
|
||||
|
||||
type cartItemController struct {}
|
||||
|
||||
func NewCartItemController() CartItemController {
|
||||
return &cartItemController{}
|
||||
}
|
||||
|
||||
func generateSessionId() string {
|
||||
bytes := make([]byte, 16) // 16 bytes = 128 bits
|
||||
_, err := rand.Read(bytes)
|
||||
if err != nil {
|
||||
panic("failed to generate session ID")
|
||||
}
|
||||
return hex.EncodeToString(bytes)
|
||||
}
|
||||
|
||||
func GetSessionId(ctx *gin.Context) string {
|
||||
sessionId, err := ctx.Cookie("session_id")
|
||||
|
||||
if err != nil {
|
||||
sessionId = generateSessionId()
|
||||
ctx.SetCookie("session_id", sessionId, 3600, "/", "", false, true)
|
||||
}
|
||||
|
||||
return sessionId
|
||||
}
|
||||
|
||||
func (rc *cartItemController) NewCartItemFromForm(ctx *gin.Context) (models.CartItem, error) {
|
||||
fmt.Println("NEWITEM")
|
||||
sessionId := GetSessionId(ctx)
|
||||
|
||||
shopItemId, err := strconv.Atoi(ctx.PostForm("ShopItemId"))
|
||||
|
||||
if err != nil {
|
||||
return models.CartItem{}, err
|
||||
}
|
||||
|
||||
quantity := 1
|
||||
//quantity, err := strconv.Atoi(ctx.PostForm("quantity"))
|
||||
|
||||
//if err != nil {
|
||||
// return models.CartItem{}, err
|
||||
//}
|
||||
|
||||
cartItem := models.CartItem{
|
||||
SessionId: sessionId,
|
||||
ShopItemId: shopItemId,
|
||||
Quantity: quantity,
|
||||
}
|
||||
|
||||
fmt.Println("NEWITEM")
|
||||
return cartItem, nil
|
||||
}
|
||||
|
||||
|
||||
func (rc *cartItemController) Create(c *gin.Context) {
|
||||
cartItem, err := rc.NewCartItemFromForm(c)
|
||||
|
||||
if err != nil {
|
||||
ReplyError(c, fmt.Errorf("cartItem creation failed: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
_, err = repositories.CartItems.Create(cartItem)
|
||||
|
||||
if err != nil {
|
||||
ReplyError(c, fmt.Errorf("cartItem creation failed: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
ReplyOK(c, "cartItem was created")
|
||||
}
|
||||
|
||||
|
||||
func (rc *cartItemController) Update(c *gin.Context) {
|
||||
cartItem, err := rc.NewCartItemFromForm(c)
|
||||
|
||||
if err != nil {
|
||||
ReplyError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = repositories.CartItems.Update(cartItem)
|
||||
|
||||
if err != nil {
|
||||
ReplyError(c, fmt.Errorf("cartItem creation failed: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
ReplyOK(c, "cartItem was updated")
|
||||
}
|
||||
|
||||
//func (rc *cartItemController) Delete(c *gin.Context) {
|
||||
// err := repositories.CartItems.DeleteBySessionId(c.Param("id"))
|
||||
//
|
||||
// if err != nil {
|
||||
// ReplyError(c, fmt.Errorf("cartItem deletion failed: %s", err))
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// ReplyOK(c, "cartItem was deleted")
|
||||
//}
|
||||
|
||||
func (rc *cartItemController) CartItemView(c *gin.Context) {
|
||||
sessionId := GetSessionId(c)
|
||||
|
||||
cartItems, err := repositories.CartItems.GetAllBySession(sessionId)
|
||||
|
||||
if err != nil {
|
||||
c.HTML(http.StatusBadRequest, "cart.html", gin.H{ "data": gin.H{ "error": err } })
|
||||
}
|
||||
|
||||
data := CreateSessionData(c, gin.H{
|
||||
"cartItems": cartItems,
|
||||
})
|
||||
|
||||
c.HTML(http.StatusOK, "cart.html", data)
|
||||
}
|
||||
|
||||
func (rc *cartItemController) AddItemHandler(c *gin.Context) {
|
||||
cartItem, err := rc.NewCartItemFromForm(c)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.HTML(http.StatusBadRequest, "cart.html", gin.H{ "error": err })
|
||||
return
|
||||
}
|
||||
|
||||
_, err = repositories.CartItems.Create(cartItem)
|
||||
if err != nil {
|
||||
data := CreateSessionData(c, gin.H{
|
||||
"error": err,
|
||||
"success": "",
|
||||
})
|
||||
|
||||
c.HTML(http.StatusOK, "cart.html", data)
|
||||
return
|
||||
}
|
||||
|
||||
rc.CartItemView(c)
|
||||
}
|
||||
|
||||
|
||||
//func (rc *cartItemController) EditItemHandler(c *gin.Context) {
|
||||
// cartItem, err := rc.NewCartItemFromForm(c)
|
||||
//
|
||||
// if err != nil {
|
||||
// c.HTML(http.StatusBadRequest, "edititem.html", gin.H{ "error": err })
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// newCartItem, err := repositories.ShopItems.GetById(c.Param("id"))
|
||||
//
|
||||
// if err != nil {
|
||||
// c.HTML(http.StatusBadRequest, "edititem.html", gin.H{ "error": err })
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// newCartItem.Name = cartItem.Name
|
||||
// newCartItem.Abstract = cartItem.Abstract
|
||||
// newCartItem.Description = cartItem.Description
|
||||
// newCartItem.Price = cartItem.Price
|
||||
// newCartItem.IsPublic = cartItem.IsPublic
|
||||
// newCartItem.Tags = cartItem.Tags
|
||||
//
|
||||
// tags, err := repositories.Tags.GetAll()
|
||||
// if err != nil {
|
||||
// c.HTML(http.StatusBadRequest, "edititem.html", gin.H{ "error": err })
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// _, err = repositories.CartItems.Update(newShopItem)
|
||||
// if err != nil {
|
||||
// data := CreateSessionData(c, gin.H{
|
||||
// "error": err,
|
||||
// "success": "",
|
||||
// "tags": tags,
|
||||
// })
|
||||
//
|
||||
// c.HTML(http.StatusOK, "edititem.html", data)
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// data := CreateSessionData(c, gin.H{
|
||||
// "error": "",
|
||||
// "success": fmt.Sprintf("Item '%s' Updated", newCartItem.Name),
|
||||
// "tags": tags,
|
||||
// })
|
||||
//
|
||||
// c.HTML(http.StatusOK, "edititem.html", data)
|
||||
//}
|
||||
|
||||
//func (rc *cartItemController) DeleteItemHandler(c *gin.Context) {
|
||||
// err := repositories.CartItems.DeleteById(c.Param("id"))
|
||||
//
|
||||
// if err != nil {
|
||||
// data := CreateSessionData(c, gin.H{
|
||||
// "error": err,
|
||||
// "success": "",
|
||||
// })
|
||||
//
|
||||
// c.HTML(http.StatusOK, "deleteitem.html", data)
|
||||
// }
|
||||
//
|
||||
// cartItems, _ := repositories.CartItems.GetAll()
|
||||
// fmt.Println(len(cartItems))
|
||||
//
|
||||
// data := CreateSessionData(c, gin.H{
|
||||
// "title": "cartItem Page",
|
||||
// "cartItems": shopItems,
|
||||
// })
|
||||
//
|
||||
// fmt.Println(data)
|
||||
//
|
||||
// c.HTML(http.StatusOK, "index.html", data)
|
||||
//}
|
||||
Reference in New Issue
Block a user