tb/main #1
|
@ -2,12 +2,13 @@ package application
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"vegan-barcode/internal/models"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Application) GetClaimsHandler(c *gin.Context) {
|
func (a *Application) GetClaimsHandler(c *gin.Context) {
|
||||||
system := c.DefaultQuery("system", "upc")
|
system := c.Query("system")
|
||||||
barcode := c.Query("barcode")
|
barcode := c.Query("barcode")
|
||||||
|
|
||||||
productClaims, err := a.GetClaims(system, barcode)
|
productClaims, err := a.GetClaims(system, barcode)
|
||||||
|
@ -17,3 +18,13 @@ func (a *Application) GetClaimsHandler(c *gin.Context) {
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, productClaims)
|
c.JSON(http.StatusOK, productClaims)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Application) PostClaimHandler(c *gin.Context) {
|
||||||
|
system := c.Query("system")
|
||||||
|
barcode := c.Query("barcode")
|
||||||
|
|
||||||
|
var requestBody models.UserClaimForm
|
||||||
|
c.BindJSON(&requestBody)
|
||||||
|
|
||||||
|
a.CreateClaim(system, barcode, requestBody)
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package application
|
package application
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"vegan-barcode/internal/models"
|
"vegan-barcode/internal/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,6 +10,9 @@ func (a *Application) GetClaims(system string, barcode string) (*models.ProductC
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if id == -1 {
|
||||||
|
return nil, errors.New("Product not found")
|
||||||
|
}
|
||||||
|
|
||||||
claims, err := a.db.FindClaimsByProductID(id)
|
claims, err := a.db.FindClaimsByProductID(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -17,3 +21,20 @@ func (a *Application) GetClaims(system string, barcode string) (*models.ProductC
|
||||||
|
|
||||||
return &models.ProductClaims{Id: id, Claims: claims}, nil
|
return &models.ProductClaims{Id: id, Claims: claims}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Application) CreateClaim(system string, barcode string, form models.UserClaimForm) {
|
||||||
|
id, err := a.db.FindProductIDByBarcode(system, barcode)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// no product, create new
|
||||||
|
if id == -1 {
|
||||||
|
product, err := a.db.CreateProduct()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
id = product.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
claim, err := a.db.CreateUserClaim(id, form)
|
||||||
|
}
|
||||||
|
|
|
@ -5,10 +5,10 @@ import (
|
||||||
"vegan-barcode/internal/models"
|
"vegan-barcode/internal/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (database *Database) FindClaimsByProductID(product_id int) (claims []models.Claim, err error) {
|
func (d *Database) FindClaimsByProductID(product_id int) (claims []models.Claim, err error) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
err = database.db.Query(ctx, claims, `
|
err = d.db.Query(ctx, claims, `
|
||||||
SELECT
|
SELECT
|
||||||
cluster,
|
cluster,
|
||||||
id,
|
id,
|
||||||
|
@ -55,3 +55,21 @@ func (database *Database) FindClaimsByProductID(product_id int) (claims []models
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Database) CreateUserClaim(id int, form models.UserClaimForm) (*UserClaim, error) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var uc = UserClaim{
|
||||||
|
Id: id,
|
||||||
|
Evidence_type: form.Evidence_type,
|
||||||
|
Evidence: form.Evidence,
|
||||||
|
Claims: form.Claims,
|
||||||
|
Counterclaims: form.Counterclaims,
|
||||||
|
}
|
||||||
|
|
||||||
|
err := d.db.Insert(ctx, UserClaimsTable, uc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &uc, nil
|
||||||
|
}
|
||||||
|
|
|
@ -63,8 +63,8 @@ func (database *Database) createTables(ctx context.Context) {
|
||||||
product_id INTEGER,
|
product_id INTEGER,
|
||||||
evidence_type INTEGER,
|
evidence_type INTEGER,
|
||||||
evidence JSONB,
|
evidence JSONB,
|
||||||
claim INTEGER,
|
claims INTEGER[],
|
||||||
counter_claim INTEGER,
|
counterclaims INTEGER[],
|
||||||
created_at TIMESTAMPTZ,
|
created_at TIMESTAMPTZ,
|
||||||
created_by TEXT,
|
created_by TEXT,
|
||||||
|
|
||||||
|
@ -82,8 +82,8 @@ func (database *Database) createTables(ctx context.Context) {
|
||||||
product_id INTEGER,
|
product_id INTEGER,
|
||||||
worker_type INTEGER,
|
worker_type INTEGER,
|
||||||
evidence JSONB,
|
evidence JSONB,
|
||||||
claim INTEGER,
|
claims INTEGER[],
|
||||||
counter_claim INTEGER,
|
counterclaims INTEGER[],
|
||||||
created_at TIMESTAMPTZ,
|
created_at TIMESTAMPTZ,
|
||||||
|
|
||||||
CONSTRAINT fk_product_id FOREIGN KEY(product_id) REFERENCES products(id)
|
CONSTRAINT fk_product_id FOREIGN KEY(product_id) REFERENCES products(id)
|
||||||
|
|
|
@ -13,22 +13,22 @@ type Product struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type AutomatedClaim struct {
|
type AutomatedClaim struct {
|
||||||
id int `ksql:"id"`
|
Id int `ksql:"id"`
|
||||||
product_id int `ksql:"product_id"`
|
Product_id int `ksql:"product_id"`
|
||||||
worker_type models.WorkerType `ksql:"worker_type"`
|
Worker_type models.WorkerType `ksql:"worker_type"`
|
||||||
evidence struct{} `ksql:"evidence,json"`
|
Evidence struct{} `ksql:"evidence,json"`
|
||||||
claim models.ClaimType `ksql:"claim"`
|
Claims []models.ClaimType `ksql:"claims"`
|
||||||
counter_claim models.ClaimType `ksql:"counter_claim"`
|
Counterclaims []models.ClaimType `ksql:"counterclaims"`
|
||||||
created_at time.Time `ksql:"created_at,timeNowUTC"`
|
Created_at time.Time `ksql:"created_at,timeNowUTC"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserClaim struct {
|
type UserClaim struct {
|
||||||
id int `ksql:"id"`
|
Id int `ksql:"id"`
|
||||||
product_id int `ksql:"product_id"`
|
Product_id int `ksql:"product_id"`
|
||||||
evidence_type models.EvidenceType `ksql:"evidence_type"`
|
Evidence_type models.EvidenceType `ksql:"evidence_type"`
|
||||||
evidence struct{} `ksql:"evidence,json"`
|
Evidence struct{} `ksql:"evidence,json"`
|
||||||
claim models.ClaimType `ksql:"claim"`
|
Claims []models.ClaimType `ksql:"claims"`
|
||||||
counter_claim models.ClaimType `ksql:"counter_claim"`
|
Counterclaims []models.ClaimType `ksql:"counterclaims"`
|
||||||
created_at time.Time `ksql:"created_at,timeNowUTC"`
|
Created_at time.Time `ksql:"created_at,timeNowUTC"`
|
||||||
created_by string `ksql:"created_by"`
|
Created_by string `ksql:"created_by"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,37 @@
|
||||||
package database
|
package database
|
||||||
|
|
||||||
import "context"
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/vingarcia/ksql"
|
||||||
|
)
|
||||||
|
|
||||||
func (d *Database) FindProductIDByBarcode(system string, barcode string) (id int, err error) {
|
func (d *Database) FindProductIDByBarcode(system string, barcode string) (id int, err error) {
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
err = d.db.QueryOne(ctx, &id, "SELECT id FROM products WHERE system = ? AND barcode = ?", system, barcode)
|
err = d.db.QueryOne(ctx, &id, "SELECT id FROM products WHERE system = ? AND barcode = ?", system, barcode)
|
||||||
|
if err == ksql.ErrRecordNotFound {
|
||||||
|
return -1, nil
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Database) CreateProduct(system string, barcode string) (*Product, error) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var product = Product{
|
||||||
|
System: system,
|
||||||
|
Barcode: barcode,
|
||||||
|
Created_at: time.Now(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.db.Insert(ctx, ProductsTable, &product); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &product, nil
|
||||||
|
}
|
||||||
|
|
|
@ -59,3 +59,11 @@ type ProductClaims struct {
|
||||||
Id int
|
Id int
|
||||||
Claims []Claim
|
Claims []Claim
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserClaimForm struct {
|
||||||
|
Evidence_type EvidenceType
|
||||||
|
Evidence struct{}
|
||||||
|
Claims []ClaimType
|
||||||
|
Counterclaims []ClaimType
|
||||||
|
Created_by string
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue