diff --git a/apis/admin/user.api b/apis/admin/user.api index 3f4ba90..8d01bda 100644 --- a/apis/admin/user.api +++ b/apis/admin/user.api @@ -51,7 +51,7 @@ type ( RefererId *int64 `json:"referer_id"` Enable *bool `json:"enable"` IsAdmin *bool `json:"is_admin"` - Remark string `json:"remark"` + Remark *string `json:"remark"` } UpdateUserNotifySettingRequest { UserId int64 `json:"user_id" validate:"required"` diff --git a/internal/logic/admin/user/updateUserBasicInfoLogic.go b/internal/logic/admin/user/updateUserBasicInfoLogic.go index d183604..3d5e504 100644 --- a/internal/logic/admin/user/updateUserBasicInfoLogic.go +++ b/internal/logic/admin/user/updateUserBasicInfoLogic.go @@ -101,7 +101,11 @@ func (l *UpdateUserBasicInfoLogic) UpdateUserBasicInfo(req *types.UpdateUserBasi } if req.Commission != nil && *req.Commission != userInfo.Commission { - if isWithdrawalScene(req.Remark) { + remark := "" + if req.Remark != nil { + remark = *req.Remark + } + if isWithdrawalScene(remark) { logWithdrawalGuard(l.Logger, userInfo.Id) return errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "commission overwrite is blocked in withdrawal scene") } @@ -129,8 +133,8 @@ func (l *UpdateUserBasicInfoLogic) UpdateUserBasicInfo(req *types.UpdateUserBasi if req.IsAdmin != nil { userInfo.IsAdmin = req.IsAdmin } - if req.Remark != "" { - userInfo.Remark = req.Remark + if req.Remark != nil { + userInfo.Remark = *req.Remark } if req.OnlyFirstPurchase != nil { userInfo.OnlyFirstPurchase = req.OnlyFirstPurchase diff --git a/internal/types/types.go b/internal/types/types.go index 8c5787f..c025ed9 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -3236,7 +3236,7 @@ type UpdateUserBasiceInfoRequest struct { RefererId *int64 `json:"referer_id"` Enable *bool `json:"enable"` IsAdmin *bool `json:"is_admin"` - Remark string `json:"remark"` + Remark *string `json:"remark"` } type UpdateUserNotifyRequest struct { diff --git a/internal/types/types_test.go b/internal/types/types_test.go new file mode 100644 index 0000000..d5b9d10 --- /dev/null +++ b/internal/types/types_test.go @@ -0,0 +1,33 @@ +package types + +import ( + "encoding/json" + "testing" +) + +func TestUpdateUserBasiceInfoRequestDistinguishesOmittedAndEmptyRemark(t *testing.T) { + var omitted UpdateUserBasiceInfoRequest + if err := json.Unmarshal([]byte(`{"user_id":1001}`), &omitted); err != nil { + t.Fatalf("unmarshal omitted remark: %v", err) + } + if omitted.Remark != nil { + t.Fatalf("omitted remark should stay nil, got %q", *omitted.Remark) + } + if omitted.RefererId != nil { + t.Fatalf("omitted referer_id should stay nil, got %d", *omitted.RefererId) + } + if omitted.Balance != nil || omitted.GiftAmount != nil || omitted.Commission != nil { + t.Fatalf("omitted money fields should stay nil, got balance=%v gift=%v commission=%v", omitted.Balance, omitted.GiftAmount, omitted.Commission) + } + + var cleared UpdateUserBasiceInfoRequest + if err := json.Unmarshal([]byte(`{"user_id":1001,"remark":""}`), &cleared); err != nil { + t.Fatalf("unmarshal empty remark: %v", err) + } + if cleared.Remark == nil { + t.Fatal("explicit empty remark should be present") + } + if *cleared.Remark != "" { + t.Fatalf("explicit empty remark should decode to empty string, got %q", *cleared.Remark) + } +}