优化配送订单收货地址联动显示
This commit is contained in:
@@ -4,6 +4,7 @@ package user
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"git.apinb.com/bsm-sdk/core/errcode"
|
||||
"git.apinb.com/bsm-sdk/core/infra"
|
||||
@@ -28,6 +29,7 @@ func ListUserAddress(ctx *gin.Context) {
|
||||
var list []models.UserAddress
|
||||
var total int64
|
||||
query := common.ApplyKeywordFilter(ctx, common.ActiveRecords(impl.DBService.Model(&models.UserAddress{})), &models.UserAddress{})
|
||||
query = filterUserAddressByContract(query, ctx.Query("gasorder_contract_identity"))
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
infra.Response.Error(ctx, err)
|
||||
return
|
||||
@@ -45,6 +47,17 @@ func ListUserAddress(ctx *gin.Context) {
|
||||
infra.Response.Success(ctx, gin.H{"total": total, "list": restoreUserAddressLocations(protected, list)})
|
||||
}
|
||||
|
||||
// filterUserAddressByContract 仅返回指定配送合同签约用户的地址,避免后台下单时跨用户选择。
|
||||
func filterUserAddressByContract(query *gorm.DB, contractIdentity string) *gorm.DB {
|
||||
contractIdentity = strings.TrimSpace(contractIdentity)
|
||||
if contractIdentity == "" {
|
||||
return query
|
||||
}
|
||||
contractUser := common.ActiveRecords(impl.DBService.Model(&models.GasorderContract{})).
|
||||
Select("user_account_id").Where("identity = ?", contractIdentity)
|
||||
return query.Where("user_account_id = (?)", contractUser)
|
||||
}
|
||||
|
||||
// GetUserAddress 查询用户地址详情,并返回详情与编辑页需要的地址和坐标。
|
||||
func GetUserAddress(ctx *gin.Context) {
|
||||
var address models.UserAddress
|
||||
|
||||
@@ -3,11 +3,45 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.apinb.com/heqiapp/platforms/backend/api/internal/impl"
|
||||
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// TestFilterUserAddressByContract 验证下单地址候选通过合同签约用户进行服务端精确过滤。
|
||||
func TestFilterUserAddressByContract(t *testing.T) {
|
||||
sqlDatabase, _, err := sqlmock.New()
|
||||
if err != nil {
|
||||
t.Fatalf("创建模拟数据库失败:%v", err)
|
||||
}
|
||||
defer sqlDatabase.Close()
|
||||
database, err := gorm.Open(postgres.New(postgres.Config{Conn: sqlDatabase}), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("创建 GORM 数据库失败:%v", err)
|
||||
}
|
||||
previous := impl.DBService
|
||||
impl.DBService = database
|
||||
defer func() { impl.DBService = previous }()
|
||||
|
||||
statement := database.ToSQL(func(tx *gorm.DB) *gorm.DB {
|
||||
var addresses []models.UserAddress
|
||||
return filterUserAddressByContract(
|
||||
tx.Model(&models.UserAddress{}),
|
||||
" contract-1 ",
|
||||
).Find(&addresses)
|
||||
})
|
||||
if !strings.Contains(statement, `"gasorder_contract"`) ||
|
||||
!strings.Contains(statement, `identity = 'contract-1'`) ||
|
||||
!strings.Contains(statement, `user_account_id = (`) {
|
||||
t.Fatalf("合同用户地址过滤 SQL 不完整:%s", statement)
|
||||
}
|
||||
}
|
||||
|
||||
// TestRestoreUserAddressLocations 验证用户地址列表按原顺序恢复地址与坐标。
|
||||
func TestRestoreUserAddressLocations(t *testing.T) {
|
||||
response := []any{
|
||||
|
||||
Reference in New Issue
Block a user