From f4faeb351d6e702cfacb9eb2fb31ddb9124fef72 Mon Sep 17 00:00:00 2001 From: kalipso Date: Fri, 27 Jun 2025 17:02:57 +0200 Subject: [PATCH] add basic paper model/view/controller paper weight is missing --- controllers/configController.go | 99 +++++++++++++++++++++++++++++++++ main.go | 6 ++ models/paper.go | 74 ++++++++++++++++++++++++ repositories/paperRepository.go | 82 +++++++++++++++++++++++++++ repositories/repository.go | 2 + views/paperview.html | 37 ++++++++++++ 6 files changed, 300 insertions(+) create mode 100644 models/paper.go create mode 100644 repositories/paperRepository.go create mode 100644 views/paperview.html diff --git a/controllers/configController.go b/controllers/configController.go index 4c46251..5dfba1f 100644 --- a/controllers/configController.go +++ b/controllers/configController.go @@ -15,6 +15,12 @@ type ConfigController interface { AddConfigHandler(*gin.Context) ConfigHandler(*gin.Context) ConfigView(*gin.Context) + + GetAllPaper(*gin.Context) + PaperView(*gin.Context) + PaperHandler(*gin.Context) + AddPaperHandler(*gin.Context) + CreateTag(*gin.Context) GetAllTags(*gin.Context) TagView(*gin.Context) @@ -108,6 +114,99 @@ func (rc *configController) ConfigHandler(ctx *gin.Context) { rc.ConfigView(ctx) } +func (rc *configController) PaperHandler(ctx *gin.Context) { + newPaper, err := models.NewPaper(ctx) + action := ctx.PostForm("action") + + if err != nil { + fmt.Println(err) + ctx.HTML(http.StatusBadRequest, "paperview.html", gin.H{"error": err}) + return + } + + paper, err := repositories.Papers.GetById(ctx.Param("id")) + + if err != nil { + fmt.Println(err) + ctx.HTML(http.StatusBadRequest, "paperview.html", gin.H{"error": err}) + return + } + + if action == "update" { + paper.Name = newPaper.Name + paper.Brand = newPaper.Brand + paper.Size = newPaper.Size + paper.Price = newPaper.Price + paper, err = repositories.Papers.Update(paper) + + if err != nil { + fmt.Println(err) + ctx.HTML(http.StatusBadRequest, "paperview.html", gin.H{"error": err}) + return + } + } + + if action == "delete" { + repositories.Papers.DeleteById(ctx.Param("id")) + } + + rc.PaperView(ctx) +} + +func (rc *configController) AddPaperHandler(c *gin.Context) { + paper, err := models.NewPaper(c) + + if err != nil { + fmt.Println(err) + c.HTML(http.StatusBadRequest, "paperview.html", gin.H{"error": err}) + return + } + + _, err = repositories.Papers.Create(paper) + if err != nil { + data := CreateSessionData(c, gin.H{ + "error": err, + "success": "", + }) + + c.HTML(http.StatusOK, "paperview.html", data) + return + } + + rc.PaperView(c) +} + +func (rc *configController) PaperView(c *gin.Context) { + papers, err := repositories.Papers.GetAll() + + if err != nil { + c.HTML(http.StatusBadRequest, "paperview.html", gin.H{"data": gin.H{"error": err}}) + } + + data := CreateSessionData(c, gin.H{ + "paper": papers, + }) + + if err != nil { + c.HTML(http.StatusBadRequest, "paperview.html", data) + } + + c.HTML(http.StatusOK, "paperview.html", data) +} + +func (rc *configController) GetAllPaper(c *gin.Context) { + papers, err := repositories.Papers.GetAll() + + if err != nil { + ReplyError(c, fmt.Errorf("Could not query Papers")) + return + } + + c.JSON(http.StatusOK, papers) +} + +////////////////////////////////////////////////////////////////////// + func (rc *configController) TagHandler(ctx *gin.Context) { name := ctx.PostForm("name") color := ctx.PostForm("color") diff --git a/main.go b/main.go index acf0549..09d1b7c 100644 --- a/main.go +++ b/main.go @@ -76,6 +76,12 @@ func main() { viewRoutes.POST("/tags/:id", authValidator.RequireAdmin, configController.TagHandler) viewRoutes.GET("/tags/:id", userController.TagView) viewRoutes.POST("/tags", authValidator.RequireAdmin, configController.AddTagHandler) + + viewRoutes.GET("/paper", authValidator.RequireAdmin, configController.PaperView) + viewRoutes.POST("/paper/:id", authValidator.RequireAdmin, configController.PaperHandler) + viewRoutes.GET("/paper/:id", userController.TagView) + viewRoutes.POST("/paper", authValidator.RequireAdmin, configController.AddPaperHandler) + viewRoutes.GET("/cart", authValidator.RequireAuth, cartItemController.CartItemView) viewRoutes.POST("/cart", authValidator.RequireAuth, cartItemController.AddItemHandler) viewRoutes.POST("/cart/delete", authValidator.RequireAuth, cartItemController.DeleteItemHandler) diff --git a/models/paper.go b/models/paper.go new file mode 100644 index 0000000..5dc3b37 --- /dev/null +++ b/models/paper.go @@ -0,0 +1,74 @@ +package models + +import ( + "fmt" + "github.com/gin-gonic/gin" + "gorm.io/gorm" + "strconv" + "strings" +) + +type PaperSize string + +const ( + A3 PaperSize = "A3" + A4 PaperSize = "A4" + A5 PaperSize = "A5" + SRA3 PaperSize = "SRA3" +) + +func ParseSize(s string) (c PaperSize, err error) { + s = strings.ToUpper(s) + if s == "A3" { + return A3, nil + } else if s == "A4" { + return A4, nil + } else if s == "A5" { + return A5, nil + } else if s == "SRA3" { + return SRA3, nil + } + + return c, fmt.Errorf("Cannot parse category %s", s) +} + +type Paper struct { + gorm.Model + Name string `json:"name" binding:"required" gorm:"not null"` + Brand string `json:"brand" binding:"required"` + Size PaperSize `json:"size" binding:"required"` + Price float64 `json:"price" binding:"required"` +} + +func NewPaper(ctx *gin.Context) (Paper, error) { + name := ctx.PostForm("name") + brand := ctx.PostForm("brand") + sizeTmp := ctx.PostForm("size") + priceTmp := ctx.PostForm("price") + + price, err := strconv.ParseFloat(priceTmp, 64) + + if err != nil { + return Paper{}, fmt.Errorf("Couldnt parse Price") + } + + size, err := ParseSize(sizeTmp) + + if err != nil { + return Paper{}, fmt.Errorf("Couldnt parse Size") + } + + if name == "" || brand == "" { + return Paper{}, fmt.Errorf("Name or brand empty") + } + + // Convert the price string to float64 + tag := Paper{ + Name: name, + Brand: brand, + Size: size, + Price: price, + } + + return tag, nil +} diff --git a/repositories/paperRepository.go b/repositories/paperRepository.go new file mode 100644 index 0000000..a0a2c93 --- /dev/null +++ b/repositories/paperRepository.go @@ -0,0 +1,82 @@ +package repositories + +import ( + "strconv" + + "gorm.io/gorm" + + "git.dynamicdiscord.de/kalipso/zineshop/models" +) + +type PaperRepository interface { + Create(models.Paper) (models.Paper, error) + GetAll() ([]models.Paper, error) + GetById(string) (models.Paper, error) + //GetByShopItemId(string) (models.Paper, error) + Update(models.Paper) (models.Paper, error) + DeleteById(string) error +} + +type GORMPaperRepository struct { + DB *gorm.DB +} + +func NewGORMPaperRepository(db *gorm.DB) PaperRepository { + return &GORMPaperRepository{ + DB: db, + } +} + +func (t *GORMPaperRepository) Create(tag models.Paper) (models.Paper, error) { + result := t.DB.Create(&tag) + + if result.Error != nil { + return models.Paper{}, result.Error + } + + return tag, nil +} + +func (t *GORMPaperRepository) GetAll() ([]models.Paper, error) { + var tags []models.Paper + result := t.DB.Find(&tags) + + return tags, result.Error +} + +func (t *GORMPaperRepository) GetById(id string) (models.Paper, error) { + tagId, err := strconv.Atoi(id) + + if err != nil { + return models.Paper{}, err + } + + var tag models.Paper + result := t.DB.First(&tag, uint(tagId)) + + if result.Error != nil { + return models.Paper{}, result.Error + } + + return tag, nil +} + +func (t *GORMPaperRepository) Update(tag models.Paper) (models.Paper, error) { + result := t.DB.Save(&tag) + if result.Error != nil { + return models.Paper{}, result.Error + } + + return tag, nil +} + +func (t *GORMPaperRepository) DeleteById(id string) error { + tagId, err := strconv.Atoi(id) + + if err != nil { + return err + } + + result := t.DB.Delete(&models.Paper{}, tagId) + return result.Error +} diff --git a/repositories/repository.go b/repositories/repository.go index dad8aa5..3e6251d 100644 --- a/repositories/repository.go +++ b/repositories/repository.go @@ -16,6 +16,7 @@ var ( Orders OrderRepository Tokens RegisterTokenRepository ConfigOptions ConfigRepository + Papers PaperRepository ) func InitRepositories() { @@ -45,4 +46,5 @@ func InitRepositories() { Orders = NewGORMOrderRepository(db) Tokens = NewGORMRegisterTokenRepository(db) ConfigOptions = NewGORMConfigRepository(db) + Papers = NewGORMPaperRepository(db) } diff --git a/views/paperview.html b/views/paperview.html new file mode 100644 index 0000000..581fee3 --- /dev/null +++ b/views/paperview.html @@ -0,0 +1,37 @@ +{{ template "header.html" . }} + + +
+
+ Your Company +

Edit Paper

+
+ +
+ {{ range .data.paper }} +
+
+
+ + + + + + + +
+ + {{ end }} +
+
+
+ + + + + +
+
+
+
+{{ template "footer.html" . }}