diff --git a/controllers/cartItemController.go b/controllers/cartItemController.go index 92d1104..75c842e 100644 --- a/controllers/cartItemController.go +++ b/controllers/cartItemController.go @@ -515,47 +515,50 @@ func (rc *cartItemController) OrdersView(c *gin.Context) { } func (rc *cartItemController) OrdersHandler(c *gin.Context) { - confirmation := c.PostForm("confirm-order") + token := c.Param("token") - if confirmation == "" { - c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Something went wrong, try again later"}) + if token == "" { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "EmptyToken"}) return } - if confirmation != "true" { - c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Order was not confirmed."}) - return + action := c.PostForm("action") + + if action == "update" { + order, err := repositories.Orders.GetByToken(token) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "No order with given token found"}) + return + } + + status := c.PostForm("order-status") + + //TODO validate status + if status == "" { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Invalid Order Status"}) + return + } + + order.Status = models.OrderStatus(status) + + _, err = repositories.Orders.Update(order) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + return + } } - sessionId := GetSessionId(c) - order, err := repositories.Orders.GetBySession(sessionId) + if action == "delete" { + fmt.Println("Deleting Order ", token) + err := repositories.Orders.DeleteByToken(token) - if err != nil { - c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Something went wrong, try again later"}) - return + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + return + } } - order.Status = models.AwaitingPayment - - err = order.Validate() - if err != nil { - c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) - return - } - - for idx := range order.CartItems { - order.CartItems[idx].SessionId = "0" - repositories.CartItems.Update(order.CartItems[idx]) - } - - _, err = repositories.Orders.Update(order) - - if err != nil { - c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) - return - } - - //TODO: cartItemRepository delete all by session - otherwise items stay in cart after completing order.. - - c.Redirect(http.StatusFound, fmt.Sprintf("/order/%s", order.Token)) + c.Redirect(http.StatusFound, "/orders") } diff --git a/controllers/printController.go b/controllers/printController.go index 8e6e62d..6ec1a65 100644 --- a/controllers/printController.go +++ b/controllers/printController.go @@ -63,18 +63,8 @@ func (rc *printController) PrintCartView(c *gin.Context) { return } - type ShopItemVariantPair struct { - ShopItem models.ShopItem - ItemVariant models.ItemVariant - } - - var items []ShopItemVariantPair - for _, cartItem := range cartItems { - items = append(items, ShopItemVariantPair{ShopItem: cartItem.ShopItem, ItemVariant: cartItem.ItemVariant}) - } - data := CreateSessionData(c, gin.H{ - "itemVariants": items, + "cartItems": cartItems, }) c.HTML(http.StatusOK, "printvariant.html", data) @@ -90,18 +80,8 @@ func (rc *printController) PrintOrderView(c *gin.Context) { cartItems := order.CartItems - type ShopItemVariantPair struct { - ShopItem models.ShopItem - ItemVariant models.ItemVariant - } - - var items []ShopItemVariantPair - for _, cartItem := range cartItems { - items = append(items, ShopItemVariantPair{ShopItem: cartItem.ShopItem, ItemVariant: cartItem.ItemVariant}) - } - data := CreateSessionData(c, gin.H{ - "itemVariants": items, + "cartItems": cartItems, }) c.HTML(http.StatusOK, "printvariant.html", data) diff --git a/main.go b/main.go index 4972f7c..cafbcd9 100644 --- a/main.go +++ b/main.go @@ -98,8 +98,9 @@ func main() { viewRoutes.POST("/order", cartItemController.OrderHandler) viewRoutes.GET("/order/:token", cartItemController.OrderView) viewRoutes.GET("/order/:token/print", authValidator.RequireAuth, printController.PrintOrderView) + viewRoutes.GET("/orders", authValidator.RequireAuth, cartItemController.OrdersView) - viewRoutes.POST("/orders", authValidator.RequireAuth, cartItemController.OrdersHandler) + viewRoutes.POST("/order/:token/edit", authValidator.RequireAuth, cartItemController.OrdersHandler) //write middleware that redirects to homescreen on register/login/reset for logged in users viewRoutes.GET("/login", userController.LoginView) diff --git a/repositories/OrderRepository.go b/repositories/OrderRepository.go index 04d45a0..ccd0b1e 100644 --- a/repositories/OrderRepository.go +++ b/repositories/OrderRepository.go @@ -15,6 +15,7 @@ type OrderRepository interface { GetByToken(string) (models.Order, error) Update(models.Order) (models.Order, error) DeleteById(string) error + DeleteByToken(string) error } type GORMOrderRepository struct { @@ -95,3 +96,8 @@ func (r *GORMOrderRepository) DeleteById(id string) error { result := r.DB.Delete(&models.Order{}, orderId) return result.Error } + +func (r *GORMOrderRepository) DeleteByToken(token string) error { + result := r.DB.Where("token = ?", token).Delete(&models.Order{}) + return result.Error +} diff --git a/views/printvariant.html b/views/printvariant.html index aea5173..7a5d48d 100644 --- a/views/printvariant.html +++ b/views/printvariant.html @@ -25,7 +25,7 @@
- {{ range .data.itemVariants }} + {{ range .data.cartItems }}
@@ -49,7 +49,7 @@
- +