fix create claim
This commit is contained in:
parent
a042866e86
commit
fa4561d90b
|
@ -1,7 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "vegan-barcode/internal/api"
|
import "vegan-barcode/internal/application"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
api.Start()
|
application.Start()
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,13 @@ import (
|
||||||
"github.com/gin-gonic/gin"
|
"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) {
|
func (a *Application) GetClaimsHandler(c *gin.Context) {
|
||||||
system := c.Query("system")
|
system := c.Param("system")
|
||||||
barcode := c.Query("barcode")
|
barcode := c.Param("barcode")
|
||||||
|
|
||||||
productClaims, err := a.GetClaims(system, barcode)
|
productClaims, err := a.GetClaims(system, barcode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -20,11 +24,21 @@ func (a *Application) GetClaimsHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Application) PostClaimHandler(c *gin.Context) {
|
func (a *Application) PostClaimHandler(c *gin.Context) {
|
||||||
system := c.Query("system")
|
system := c.Param("system")
|
||||||
barcode := c.Query("barcode")
|
barcode := c.Param("barcode")
|
||||||
|
|
||||||
var requestBody models.UserClaimForm
|
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 := gin.Default()
|
||||||
|
|
||||||
router.Group("/claims")
|
router.GET("/", application.TestHandler)
|
||||||
{
|
|
||||||
router.GET("/:barcode", application.GetClaimsHandler)
|
router.GET("/claims/:system/:barcode", application.GetClaimsHandler)
|
||||||
}
|
router.POST("/claims/:system/:barcode", application.PostClaimHandler)
|
||||||
|
|
||||||
router.Run("localhost:8080")
|
router.Run("localhost:8080")
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,39 +2,39 @@ package application
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"vegan-barcode/internal/database"
|
||||||
"vegan-barcode/internal/models"
|
"vegan-barcode/internal/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Application) GetClaims(system string, barcode string) (*models.ProductClaims, error) {
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if id == -1 {
|
if product == nil {
|
||||||
return nil, errors.New("Product not found")
|
return nil, errors.New("Product not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
claims, err := a.db.FindClaimsByProductID(id)
|
claims, err := a.db.FindClaimsByProductID(product.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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) {
|
func (a *Application) CreateClaim(system string, barcode string, form models.UserClaimForm) (*database.UserClaim, error) {
|
||||||
id, err := a.db.FindProductIDByBarcode(system, barcode)
|
product, err := a.db.FindProductByBarcode(system, barcode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// no product, create new
|
// no product, create new
|
||||||
if id == -1 {
|
if product == nil {
|
||||||
product, err := a.db.CreateProduct()
|
product, err = a.db.CreateProduct(system, barcode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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"
|
"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 := 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 {
|
if err == ksql.ErrRecordNotFound {
|
||||||
return -1, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return
|
return &product, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Database) CreateProduct(system string, barcode string) (*Product, error) {
|
func (d *Database) CreateProduct(system string, barcode string) (*Product, error) {
|
||||||
|
|
|
@ -31,7 +31,7 @@ const (
|
||||||
type EvidenceType int
|
type EvidenceType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ManufactureWebsite EvidenceType = iota
|
ManufacturerWebsite EvidenceType = iota
|
||||||
IngredientsList
|
IngredientsList
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue