修复用户地址编辑数据类型错误
This commit is contained in:
@@ -73,7 +73,7 @@ func UpdateUserAddress(ctx *gin.Context) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tx.Model(¤t).Updates(gin.H{"user_account_id": userAccountID, "address": request.Address, "longitude": request.Longitude, "latitude": request.Latitude, "is_default": request.IsDefault}).Error
|
return tx.Model(¤t).Updates(userAddressUpdateValues(request, userAccountID)).Error
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
common.RespondRecordError(ctx, err)
|
common.RespondRecordError(ctx, err)
|
||||||
@@ -82,6 +82,17 @@ func UpdateUserAddress(ctx *gin.Context) {
|
|||||||
infra.Response.Success(ctx, gin.H{"updated": true})
|
infra.Response.Success(ctx, gin.H{"updated": true})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// userAddressUpdateValues 构造 GORM 支持的标准更新映射,并保留 false 等零值字段。
|
||||||
|
func userAddressUpdateValues(request addressRequest, userAccountID uint64) map[string]any {
|
||||||
|
return map[string]any{
|
||||||
|
"user_account_id": userAccountID,
|
||||||
|
"address": request.Address,
|
||||||
|
"longitude": request.Longitude,
|
||||||
|
"latitude": request.Latitude,
|
||||||
|
"is_default": request.IsDefault,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type serviceRelationRequest struct {
|
type serviceRelationRequest struct {
|
||||||
UserAccountIdentity string `json:"user_account_identity" binding:"required"`
|
UserAccountIdentity string `json:"user_account_identity" binding:"required"`
|
||||||
GasBasicIdentity string `json:"gas_basic_identity"`
|
GasBasicIdentity string `json:"gas_basic_identity"`
|
||||||
|
|||||||
30
backend/api/internal/logic/platform/user/relation_test.go
Normal file
30
backend/api/internal/logic/platform/user/relation_test.go
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
// 功能描述:验证平台用户地址写入参数与 GORM 的兼容性。
|
||||||
|
// 版本:v1.0
|
||||||
|
package user
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
// TestUserAddressUpdateValuesUsesSupportedMap 验证更新参数使用标准映射并保留布尔零值。
|
||||||
|
func TestUserAddressUpdateValuesUsesSupportedMap(t *testing.T) {
|
||||||
|
request := addressRequest{
|
||||||
|
UserAccountIdentity: "00000000-0000-7000-8000-000000000001",
|
||||||
|
Address: "测试地址 122 号",
|
||||||
|
Longitude: "",
|
||||||
|
Latitude: "",
|
||||||
|
IsDefault: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
values := userAddressUpdateValues(request, 42)
|
||||||
|
if values["user_account_id"] != uint64(42) {
|
||||||
|
t.Fatalf("user_account_id = %#v, want 42", values["user_account_id"])
|
||||||
|
}
|
||||||
|
if values["address"] != request.Address {
|
||||||
|
t.Fatalf("address = %#v, want %q", values["address"], request.Address)
|
||||||
|
}
|
||||||
|
if value, exists := values["is_default"]; !exists || value != false {
|
||||||
|
t.Fatalf("is_default = %#v, exists = %v, want false", value, exists)
|
||||||
|
}
|
||||||
|
if len(values) != 5 {
|
||||||
|
t.Fatalf("update field count = %d, want 5", len(values))
|
||||||
|
}
|
||||||
|
}
|
||||||
35
docs/操作日志_用户地址编辑数据类型修复_20260811.md
Normal file
35
docs/操作日志_用户地址编辑数据类型修复_20260811.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# 用户地址编辑数据类型修复操作日志
|
||||||
|
|
||||||
|
操作时间:2026-08-11
|
||||||
|
|
||||||
|
操作类型:修改
|
||||||
|
|
||||||
|
影响模块:平台总后台用户地址编辑接口
|
||||||
|
|
||||||
|
## 操作前状态
|
||||||
|
|
||||||
|
用户地址编辑接口将 `gin.H` 直接传给 GORM `Updates`。当前 GORM 无法把该具名映射识别为受支持的标准更新映射,保存时在生成 SQL 前返回 `unsupported data`。
|
||||||
|
|
||||||
|
## 具体操作
|
||||||
|
|
||||||
|
- 新增 `userAddressUpdateValues`,集中构造标准 `map[string]any` 更新参数。
|
||||||
|
- 保留用户、地址、经纬度和默认地址五个原有更新字段。
|
||||||
|
- 新增回归测试,覆盖空经纬度与 `is_default=false` 的保存场景。
|
||||||
|
|
||||||
|
## 操作后状态
|
||||||
|
|
||||||
|
用户地址编辑使用 GORM 支持的标准映射类型。接口、数据库字段和业务规则均未变化,不需要数据库迁移。
|
||||||
|
|
||||||
|
## 代码变更
|
||||||
|
|
||||||
|
- `backend/api/internal/logic/platform/user/relation.go`:修复用户地址更新参数类型。
|
||||||
|
- `backend/api/internal/logic/platform/user/relation_test.go`:新增更新参数回归测试。
|
||||||
|
|
||||||
|
## 验证结果
|
||||||
|
|
||||||
|
- `go test ./internal/logic/platform/user ./internal/routers`:通过。
|
||||||
|
- `go test ./...`:其余已执行包通过;`cmd/cli`、`cmd/main`、`internal/routers` 在加载 Go 系统构建缓存时遇到 Windows `Access is denied`,属于本地构建缓存访问限制,并非测试断言失败。其中 `internal/routers` 已在前述定向命令中单独通过。
|
||||||
|
|
||||||
|
## 风险评估
|
||||||
|
|
||||||
|
风险较低。修改仅影响用户地址编辑时的更新参数构造,不改变创建流程、数据结构、公开接口或事务边界。
|
||||||
Reference in New Issue
Block a user