fix create claim
This commit is contained in:
parent
a042866e86
commit
fa4561d90b
|
@ -1,7 +1,7 @@
|
|||
package main
|
||||
|
||||
import "vegan-barcode/internal/api"
|
||||
import "vegan-barcode/internal/application"
|
||||
|
||||
func main() {
|
||||
api.Start()
|
||||
application.Start()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -31,7 +31,7 @@ const (
|
|||
type EvidenceType int
|
||||
|
||||
const (
|
||||
ManufactureWebsite EvidenceType = iota
|
||||
ManufacturerWebsite EvidenceType = iota
|
||||
IngredientsList
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue