diff --git a/api/db/transaction.go b/api/db/transaction.go index 9756329d8c639ee6742050e52b08697ead988710..2ef9a38ddfd128ad1d6fc5336cce44580a89af63 100644 --- a/api/db/transaction.go +++ b/api/db/transaction.go @@ -4,6 +4,8 @@ import ( "errors" "fmt" "log" + "strconv" + "strings" "time" "gorm.io/gorm" @@ -69,6 +71,22 @@ func (d *DB) ListTransactions(query map[string][]string) (transactions []Transac tx = tx.Where("proxy in ?", v) case "type": tx = tx.Where("type in ?", v) + case "product": + var ids []interface{} + where := make([]string, len(v)) + for i := range v { + var id int + id, err = strconv.Atoi(v[i]) + if err != nil { + return + } + ids = append(ids, id, id) + where[i] = "purchases.product = ? OR order_products.product_code = ?" + } + tx = tx.Joins("left join purchases on purchases.`transaction` = transactions.id"). + Joins("left join order_purchases on order_purchases.transaction_id = transactions.id"). + Joins("left join order_products on order_products.id = order_purchases.order_product_id"). + Where(strings.Join(where, " OR "), ids...) default: log.Printf("Unexpected transaction query: %s %v", k, v) }