From fa4561d90bb47cac703d7925fe87545b31012601 Mon Sep 17 00:00:00 2001 From: katefort Date: Mon, 21 Apr 2025 20:43:02 -0500 Subject: [PATCH] fix create claim --- cmd/server/main.go | 4 ++-- internal/application/handlers.go | 26 ++++++++++++++++++++------ internal/application/routes.go | 8 ++++---- internal/application/services.go | 20 ++++++++++---------- internal/database/products.go | 12 +++++++----- internal/models/models.go | 2 +- 6 files changed, 44 insertions(+), 28 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index aee577a..f8bd9ef 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,7 +1,7 @@ package main -import "vegan-barcode/internal/api" +import "vegan-barcode/internal/application" func main() { - api.Start() + application.Start() } diff --git a/internal/application/handlers.go b/internal/application/handlers.go index fd95bc3..0d0e490 100644 --- a/internal/application/handlers.go +++ b/internal/application/handlers.go @@ -7,9 +7,13 @@ import ( "github.com/gin-gonic/gin" ) +func (a *Application) TestHandler(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"message": "Hello World!"}) +} + func (a *Application) GetClaimsHandler(c *gin.Context) { - system := c.Query("system") - barcode := c.Query("barcode") + system := c.Param("system") + barcode := c.Param("barcode") productClaims, err := a.GetClaims(system, barcode) if err != nil { @@ -20,11 +24,21 @@ func (a *Application) GetClaimsHandler(c *gin.Context) { } func (a *Application) PostClaimHandler(c *gin.Context) { - system := c.Query("system") - barcode := c.Query("barcode") + system := c.Param("system") + barcode := c.Param("barcode") var requestBody models.UserClaimForm - c.BindJSON(&requestBody) + err := c.BindJSON(&requestBody) + if err != nil { + c.JSON(http.StatusBadRequest, nil) + return + } - a.CreateClaim(system, barcode, requestBody) + claim, err := a.CreateClaim(system, barcode, requestBody) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, claim) } diff --git a/internal/application/routes.go b/internal/application/routes.go index f921a21..f7af42a 100644 --- a/internal/application/routes.go +++ b/internal/application/routes.go @@ -8,10 +8,10 @@ func (application *Application) bindRoutes() { router := gin.Default() - router.Group("/claims") - { - router.GET("/:barcode", application.GetClaimsHandler) - } + router.GET("/", application.TestHandler) + + router.GET("/claims/:system/:barcode", application.GetClaimsHandler) + router.POST("/claims/:system/:barcode", application.PostClaimHandler) router.Run("localhost:8080") } diff --git a/internal/application/services.go b/internal/application/services.go index e5d9424..ae26cf7 100644 --- a/internal/application/services.go +++ b/internal/application/services.go @@ -2,39 +2,39 @@ package application import ( "errors" + "vegan-barcode/internal/database" "vegan-barcode/internal/models" ) func (a *Application) GetClaims(system string, barcode string) (*models.ProductClaims, error) { - id, err := a.db.FindProductIDByBarcode(system, barcode) + product, err := a.db.FindProductByBarcode(system, barcode) if err != nil { return nil, err } - if id == -1 { + if product == nil { return nil, errors.New("Product not found") } - claims, err := a.db.FindClaimsByProductID(id) + claims, err := a.db.FindClaimsByProductID(product.Id) if err != nil { return nil, err } - return &models.ProductClaims{Id: id, Claims: claims}, nil + return &models.ProductClaims{Id: product.Id, Claims: claims}, nil } -func (a *Application) CreateClaim(system string, barcode string, form models.UserClaimForm) { - id, err := a.db.FindProductIDByBarcode(system, barcode) +func (a *Application) CreateClaim(system string, barcode string, form models.UserClaimForm) (*database.UserClaim, error) { + product, err := a.db.FindProductByBarcode(system, barcode) if err != nil { return nil, err } // no product, create new - if id == -1 { - product, err := a.db.CreateProduct() + if product == nil { + product, err = a.db.CreateProduct(system, barcode) if err != nil { return nil, err } - id = product.ID } - claim, err := a.db.CreateUserClaim(id, form) + return a.db.CreateUserClaim(product.Id, form) } diff --git a/internal/database/products.go b/internal/database/products.go index 8ffd943..75dc6ab 100644 --- a/internal/database/products.go +++ b/internal/database/products.go @@ -7,18 +7,20 @@ import ( "github.com/vingarcia/ksql" ) -func (d *Database) FindProductIDByBarcode(system string, barcode string) (id int, err error) { +func (d *Database) FindProductByBarcode(system string, barcode string) (*Product, error) { ctx := context.Background() + ctx = ksql.InjectLogger(ctx, ksql.Logger) - err = d.db.QueryOne(ctx, &id, "SELECT id FROM products WHERE system = ? AND barcode = ?", system, barcode) + var product Product + err := d.db.QueryOne(ctx, &product, "FROM products WHERE system = $1 AND barcode = $2", system, barcode) if err == ksql.ErrRecordNotFound { - return -1, nil + return nil, nil } if err != nil { - return -1, err + return nil, err } - return + return &product, nil } func (d *Database) CreateProduct(system string, barcode string) (*Product, error) { diff --git a/internal/models/models.go b/internal/models/models.go index b6efda3..3b1b77a 100644 --- a/internal/models/models.go +++ b/internal/models/models.go @@ -31,7 +31,7 @@ const ( type EvidenceType int const ( - ManufactureWebsite EvidenceType = iota + ManufacturerWebsite EvidenceType = iota IngredientsList )