package controllers import ( "fmt" "net/http" "strconv" "git.dynamicdiscord.de/kalipso/zineshop/models" "git.dynamicdiscord.de/kalipso/zineshop/repositories" "github.com/gin-gonic/gin" ) type PrintController interface { PrintVariantView(*gin.Context) PrintCartView(*gin.Context) PrintOrderView(*gin.Context) PrintHandler(*gin.Context) } type printController struct{} func NewPrintController() PrintController { return &printController{} } func (rc *printController) PrintVariantView(c *gin.Context) { variant, err := repositories.ShopItems.GetVariantById(c.Param("id")) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } shopItem, err := repositories.ShopItems.GetById(fmt.Sprintf("%v", variant.ShopItemID)) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } type ShopItemVariantPair struct { ShopItem models.ShopItem ItemVariant models.ItemVariant } data := CreateSessionData(c, gin.H{ "itemVariants": []ShopItemVariantPair{ {ShopItem: shopItem, ItemVariant: variant}, }, }) fmt.Println(data) c.HTML(http.StatusOK, "printvariant.html", data) } func (rc *printController) PrintCartView(c *gin.Context) { sessionId := GetSessionId(c) cartItems, err := repositories.CartItems.GetAllBySession(sessionId) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } data := CreateSessionData(c, gin.H{ "cartItems": cartItems, }) c.HTML(http.StatusOK, "printvariant.html", data) } func (rc *printController) PrintOrderView(c *gin.Context) { order, err := repositories.Orders.GetByToken(c.Param("token")) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } cartItems := order.CartItems data := CreateSessionData(c, gin.H{ "cartItems": cartItems, }) c.HTML(http.StatusOK, "printvariant.html", data) } func (rc *printController) PrintHandler(c *gin.Context) { variantIds := c.PostFormArray("variant-id[]") variantAmounts := c.PostFormArray("variant-amount[]") variantCoverPages := c.PostFormArray("variant-coverpage[]") if len(variantIds) != len(variantAmounts) || len(variantIds) != len(variantCoverPages) { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": "Invalid arguments"}}) return } var printJobs []models.PrintJob for idx := range variantIds { variant, err := repositories.ShopItems.GetVariantById(variantIds[idx]) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } shopItem, err := repositories.ShopItems.GetById(fmt.Sprintf("%v", variant.ShopItemID)) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } coverPage := false if variantCoverPages[idx] == "1" { coverPage = true } variantAmount, err := strconv.Atoi(variantAmounts[idx]) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } printJob, err := models.NewPrintJob(shopItem, variant, coverPage, uint(variantAmount)) if err != nil { c.HTML(http.StatusBadRequest, "error.html", gin.H{"data": gin.H{"error": err}}) return } printJobs = append(printJobs, printJob) } executeJobs := func() { for _, printJob := range printJobs { printJob.Execute() } } go executeJobs() c.HTML(http.StatusOK, "index.html", nil) }