fix: 修复兑换码搜索中已使用兑换码搜索不到的问题
将 SearchRedemptions 的 Count 和 Find 拆成独立查询链, 避免 GORM 事务中共用 query 对象导致 Count() 污染查询状态。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user