91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"vegan-barcode/internal/models"
|
|
|
|
"github.com/vingarcia/ksql"
|
|
)
|
|
|
|
func (d *Database) FindClaimsByProductID(product_id int) (claims []models.Claim, err error) {
|
|
ctx := context.Background()
|
|
|
|
err = d.db.Query(ctx, claims, `
|
|
SELECT
|
|
cluster,
|
|
id,
|
|
worker_type,
|
|
evidence_type,
|
|
evidence,
|
|
category,
|
|
polarity,
|
|
created_at,
|
|
created_by
|
|
FROM (
|
|
SELECT
|
|
cluster,
|
|
id,
|
|
worker_type,
|
|
evidence_type,
|
|
evidence,
|
|
category,
|
|
polarity,
|
|
created_at,
|
|
created_by,
|
|
ROW_NUMBER() OVER (PARTITION BY category ORDER BY created_at DESC) AS rn
|
|
FROM (
|
|
(
|
|
SELECT "user" as cluster, id, product_id, null as worker_type, evidence_type, evidence, unnest(claim) as category, true as polarity, created_at, created_by FROM user_claims
|
|
UNION ALL
|
|
SELECT "automated" as cluster, id, product_id, worker_type, null as evidence_type, evidence, unnest(claim) as category, true as polarity, created_at, null as created_by FROM automated_claims
|
|
)
|
|
UNION ALL
|
|
(
|
|
SELECT "user" as cluster, id, product_id, null as worker_type, evidence_type, evidence, unnest(counter_claim) as category, false as polarity, created_at, created_by FROM user_claims
|
|
UNION ALL
|
|
SELECT "automated" as cluster, id, product_id, worker_type, null as evidence_type, evidence, unnest(counter_claim) as category, false as polarity, created_at, null as created_by FROM automated_claims
|
|
)
|
|
)
|
|
WHERE product_id = $1
|
|
)
|
|
WHERE rn = 1
|
|
ORDER BY created_at;
|
|
`, product_id)
|
|
|
|
if err != nil {
|
|
return claims, err
|
|
}
|
|
return
|
|
}
|
|
|
|
func (database *Database) FindUserClaimById(claim_id int) (*UserClaim, error) {
|
|
ctx := context.Background()
|
|
|
|
var claim UserClaim
|
|
|
|
err := database.db.QueryOne(ctx, claim, "FROM user_claims WHERE id = $1", claim_id)
|
|
|
|
if err == ksql.ErrRecordNotFound {
|
|
return nil, err
|
|
}
|
|
return &claim, err
|
|
}
|
|
|
|
func (d *Database) CreateUserClaim(product_id int, form models.UserClaimForm) (*UserClaim, error) {
|
|
ctx := context.Background()
|
|
var uc = UserClaim{
|
|
Product_id: product_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
|
|
}
|