fix: pass cp gift relation type
This commit is contained in:
parent
4c41c964d2
commit
dedf6e8382
@ -71,6 +71,7 @@ type giftDTO struct {
|
|||||||
PresentationJSON string `json:"presentationJson"`
|
PresentationJSON string `json:"presentationJson"`
|
||||||
PriceVersion string `json:"priceVersion"`
|
PriceVersion string `json:"priceVersion"`
|
||||||
GiftTypeCode string `json:"giftTypeCode"`
|
GiftTypeCode string `json:"giftTypeCode"`
|
||||||
|
CPRelationType string `json:"cpRelationType"`
|
||||||
ChargeAssetType string `json:"chargeAssetType"`
|
ChargeAssetType string `json:"chargeAssetType"`
|
||||||
CoinPrice int64 `json:"coinPrice"`
|
CoinPrice int64 `json:"coinPrice"`
|
||||||
EffectiveFromMS int64 `json:"effectiveFromMs"`
|
EffectiveFromMS int64 `json:"effectiveFromMs"`
|
||||||
@ -293,6 +294,7 @@ func giftFromProto(gift *walletv1.GiftConfig) giftDTO {
|
|||||||
PresentationJSON: gift.GetPresentationJson(),
|
PresentationJSON: gift.GetPresentationJson(),
|
||||||
PriceVersion: gift.GetPriceVersion(),
|
PriceVersion: gift.GetPriceVersion(),
|
||||||
GiftTypeCode: gift.GetGiftTypeCode(),
|
GiftTypeCode: gift.GetGiftTypeCode(),
|
||||||
|
CPRelationType: gift.GetCpRelationType(),
|
||||||
ChargeAssetType: gift.GetChargeAssetType(),
|
ChargeAssetType: gift.GetChargeAssetType(),
|
||||||
CoinPrice: gift.GetCoinPrice(),
|
CoinPrice: gift.GetCoinPrice(),
|
||||||
EffectiveFromMS: gift.GetEffectiveFromMs(),
|
EffectiveFromMS: gift.GetEffectiveFromMs(),
|
||||||
|
|||||||
@ -131,6 +131,7 @@ type giftRequest struct {
|
|||||||
PresentationJSON string `json:"presentationJson"`
|
PresentationJSON string `json:"presentationJson"`
|
||||||
PriceVersion string `json:"priceVersion"`
|
PriceVersion string `json:"priceVersion"`
|
||||||
GiftTypeCode string `json:"giftTypeCode"`
|
GiftTypeCode string `json:"giftTypeCode"`
|
||||||
|
CPRelationType string `json:"cpRelationType"`
|
||||||
ChargeAssetType string `json:"chargeAssetType"`
|
ChargeAssetType string `json:"chargeAssetType"`
|
||||||
CoinPrice int64 `json:"coinPrice"`
|
CoinPrice int64 `json:"coinPrice"`
|
||||||
HeatValue int64 `json:"heatValue"` // 兼容旧后台请求;新后台不再展示或提交热度。
|
HeatValue int64 `json:"heatValue"` // 兼容旧后台请求;新后台不再展示或提交热度。
|
||||||
@ -366,6 +367,7 @@ func (r giftRequest) createProto(c *gin.Context) *walletv1.CreateGiftConfigReque
|
|||||||
PresentationJson: strings.TrimSpace(r.PresentationJSON),
|
PresentationJson: strings.TrimSpace(r.PresentationJSON),
|
||||||
PriceVersion: strings.TrimSpace(r.PriceVersion),
|
PriceVersion: strings.TrimSpace(r.PriceVersion),
|
||||||
GiftTypeCode: strings.TrimSpace(r.GiftTypeCode),
|
GiftTypeCode: strings.TrimSpace(r.GiftTypeCode),
|
||||||
|
CpRelationType: r.cpRelationType(),
|
||||||
ChargeAssetType: strings.TrimSpace(r.ChargeAssetType),
|
ChargeAssetType: strings.TrimSpace(r.ChargeAssetType),
|
||||||
CoinPrice: r.CoinPrice,
|
CoinPrice: r.CoinPrice,
|
||||||
GiftPointAmount: 0,
|
GiftPointAmount: 0,
|
||||||
@ -391,6 +393,7 @@ func (r giftRequest) updateProto(c *gin.Context, giftID string) *walletv1.Update
|
|||||||
PresentationJson: strings.TrimSpace(r.PresentationJSON),
|
PresentationJson: strings.TrimSpace(r.PresentationJSON),
|
||||||
PriceVersion: strings.TrimSpace(r.PriceVersion),
|
PriceVersion: strings.TrimSpace(r.PriceVersion),
|
||||||
GiftTypeCode: strings.TrimSpace(r.GiftTypeCode),
|
GiftTypeCode: strings.TrimSpace(r.GiftTypeCode),
|
||||||
|
CpRelationType: r.cpRelationType(),
|
||||||
ChargeAssetType: strings.TrimSpace(r.ChargeAssetType),
|
ChargeAssetType: strings.TrimSpace(r.ChargeAssetType),
|
||||||
CoinPrice: r.CoinPrice,
|
CoinPrice: r.CoinPrice,
|
||||||
GiftPointAmount: 0,
|
GiftPointAmount: 0,
|
||||||
@ -404,6 +407,27 @@ func (r giftRequest) updateProto(c *gin.Context, giftID string) *walletv1.Update
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r giftRequest) cpRelationType() string {
|
||||||
|
if strings.TrimSpace(r.GiftTypeCode) != "cp" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
// CP 关系类型最终由 wallet-service 写回 presentation_json;兼容旧前端只提交 JSON 的请求,避免保存时把兄弟/姐妹关系清掉。
|
||||||
|
if value := strings.TrimSpace(r.CPRelationType); value != "" {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
var payload map[string]any
|
||||||
|
if err := json.Unmarshal([]byte(strings.TrimSpace(r.PresentationJSON)), &payload); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if value, ok := payload["cp_relation_type"].(string); ok {
|
||||||
|
return strings.TrimSpace(value)
|
||||||
|
}
|
||||||
|
if value, ok := payload["cpRelationType"].(string); ok {
|
||||||
|
return strings.TrimSpace(value)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (r giftTypeRequest) upsertProto(c *gin.Context, typeCode string) *walletv1.UpsertGiftTypeConfigRequest {
|
func (r giftTypeRequest) upsertProto(c *gin.Context, typeCode string) *walletv1.UpsertGiftTypeConfigRequest {
|
||||||
return &walletv1.UpsertGiftTypeConfigRequest{
|
return &walletv1.UpsertGiftTypeConfigRequest{
|
||||||
RequestId: middleware.CurrentRequestID(c),
|
RequestId: middleware.CurrentRequestID(c),
|
||||||
|
|||||||
63
server/admin/internal/modules/resource/request_test.go
Normal file
63
server/admin/internal/modules/resource/request_test.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package resource
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"hyapp-admin-server/internal/appctx"
|
||||||
|
"hyapp-admin-server/internal/middleware"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGiftRequestProtoKeepsExplicitCPRelationType(t *testing.T) {
|
||||||
|
req := giftRequest{
|
||||||
|
GiftTypeCode: "cp",
|
||||||
|
CPRelationType: "brother",
|
||||||
|
PresentationJSON: `{"cp_relation_type":"sister"}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
proto := req.updateProto(newGiftRequestTestContext(), "love")
|
||||||
|
|
||||||
|
if proto.GetCpRelationType() != "brother" {
|
||||||
|
t.Fatalf("explicit cp relation type should win, got %q", proto.GetCpRelationType())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGiftRequestProtoFallsBackToPresentationCPRelationType(t *testing.T) {
|
||||||
|
req := giftRequest{
|
||||||
|
GiftID: "love",
|
||||||
|
GiftTypeCode: "cp",
|
||||||
|
PresentationJSON: `{"cp_relation_type":"sister"}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
proto := req.createProto(newGiftRequestTestContext())
|
||||||
|
|
||||||
|
if proto.GetCpRelationType() != "sister" {
|
||||||
|
t.Fatalf("presentation cp relation type should be forwarded, got %q", proto.GetCpRelationType())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGiftRequestProtoClearsCPRelationTypeForNonCPGift(t *testing.T) {
|
||||||
|
req := giftRequest{
|
||||||
|
GiftTypeCode: "normal",
|
||||||
|
CPRelationType: "brother",
|
||||||
|
PresentationJSON: `{"cp_relation_type":"brother"}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
proto := req.updateProto(newGiftRequestTestContext(), "rose")
|
||||||
|
|
||||||
|
if proto.GetCpRelationType() != "" {
|
||||||
|
t.Fatalf("non-cp gift should not forward cp relation type, got %q", proto.GetCpRelationType())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newGiftRequestTestContext() *gin.Context {
|
||||||
|
gin.SetMode(gin.TestMode)
|
||||||
|
recorder := httptest.NewRecorder()
|
||||||
|
c, _ := gin.CreateTestContext(recorder)
|
||||||
|
request := httptest.NewRequest("POST", "/admin/gifts", nil)
|
||||||
|
c.Request = request.WithContext(appctx.WithContext(request.Context(), "lalu"))
|
||||||
|
c.Set(middleware.ContextRequestID, "resource-test-request")
|
||||||
|
return c
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user