diff --git a/model/redemption.go b/model/redemption.go index 61003ded..2c267877 100644 --- a/model/redemption.go +++ b/model/redemption.go @@ -74,25 +74,26 @@ func SearchRedemptions(keyword string, startIdx int, num int) (redemptions []*Re } }() - // Build query based on keyword type - query := tx.Model(&Redemption{}) - - // Only try to convert to ID if the string represents a valid integer + // Build WHERE condition and args based on keyword type + var whereClause string + var whereArgs []interface{} if id, err := strconv.Atoi(keyword); err == nil { - query = query.Where("id = ? OR name LIKE ? OR "+commonKeyCol+" LIKE ?", id, keyword+"%", keyword+"%") + whereClause = "id = ? OR name LIKE ? OR " + commonKeyCol + " LIKE ?" + whereArgs = []interface{}{id, keyword + "%", keyword + "%"} } else { - query = query.Where("name LIKE ? OR "+commonKeyCol+" LIKE ?", keyword+"%", keyword+"%") + whereClause = "name LIKE ? OR " + commonKeyCol + " LIKE ?" + whereArgs = []interface{}{keyword + "%", keyword + "%"} } // Get total count - err = query.Count(&total).Error + err = tx.Model(&Redemption{}).Where(whereClause, whereArgs...).Count(&total).Error if err != nil { tx.Rollback() return nil, 0, err } // Get paginated data - err = query.Order("id desc").Limit(num).Offset(startIdx).Find(&redemptions).Error + err = tx.Model(&Redemption{}).Where(whereClause, whereArgs...).Order("id desc").Limit(num).Offset(startIdx).Find(&redemptions).Error if err != nil { tx.Rollback() return nil, 0, err