From 4c41c964d2aaafbdc49718fae8ca275141e60209 Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 8 Jun 2026 16:49:38 +0800 Subject: [PATCH] fix: pass app code when updating room rocket config --- .../internal/integration/roomclient/client.go | 1 + .../integration/roomclient/client_test.go | 10 +++++++ .../internal/modules/roomrocket/service.go | 29 ++++++++++++------- .../modules/roomrocket/service_test.go | 14 +++++++++ 4 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 server/admin/internal/integration/roomclient/client_test.go diff --git a/server/admin/internal/integration/roomclient/client.go b/server/admin/internal/integration/roomclient/client.go index dae3fe6e..a136a463 100644 --- a/server/admin/internal/integration/roomclient/client.go +++ b/server/admin/internal/integration/roomclient/client.go @@ -561,6 +561,7 @@ func roomPinFromProto(input *roomv1.AdminRoomPin) RoomPin { func roomRocketConfigToProto(input RoomRocketConfig) *roomv1.AdminRoomRocketConfig { return &roomv1.AdminRoomRocketConfig{ + AppCode: input.AppCode, Enabled: input.Enabled, FuelSource: input.FuelSource, LaunchDelayMs: input.LaunchDelayMS, diff --git a/server/admin/internal/integration/roomclient/client_test.go b/server/admin/internal/integration/roomclient/client_test.go new file mode 100644 index 00000000..26f92d34 --- /dev/null +++ b/server/admin/internal/integration/roomclient/client_test.go @@ -0,0 +1,10 @@ +package roomclient + +import "testing" + +func TestRoomRocketConfigToProtoKeepsAppCode(t *testing.T) { + config := roomRocketConfigToProto(RoomRocketConfig{AppCode: "lalu"}) + if config.GetAppCode() != "lalu" { + t.Fatalf("proto app code mismatch: %q", config.GetAppCode()) + } +} diff --git a/server/admin/internal/modules/roomrocket/service.go b/server/admin/internal/modules/roomrocket/service.go index b9fdd1ac..ecb66b32 100644 --- a/server/admin/internal/modules/roomrocket/service.go +++ b/server/admin/internal/modules/roomrocket/service.go @@ -7,6 +7,7 @@ import ( "slices" "strings" + "hyapp-admin-server/internal/appctx" "hyapp-admin-server/internal/integration/roomclient" ) @@ -108,17 +109,7 @@ func (s *Service) UpdateConfig(ctx context.Context, req updateRoomRocketConfigRe if s.roomClient == nil { return RoomRocketConfig{}, fmt.Errorf("room service client is not configured") } - config, err := normalizeConfig(RoomRocketConfig{ - Enabled: req.Enabled, - FuelSource: req.FuelSource, - LaunchDelayMS: req.LaunchDelayMS, - BroadcastEnabled: req.BroadcastEnabled, - BroadcastScope: req.BroadcastScope, - BroadcastDelayMS: req.BroadcastDelayMS, - RewardStackPolicy: req.RewardStackPolicy, - Levels: req.Levels, - GiftFuelRules: req.GiftFuelRules, - }) + config, err := normalizeConfig(configFromUpdateRequest(ctx, req)) if err != nil { return RoomRocketConfig{}, err } @@ -132,6 +123,22 @@ func (s *Service) UpdateConfig(ctx context.Context, req updateRoomRocketConfigRe return configFromClient(saved) } +func configFromUpdateRequest(ctx context.Context, req updateRoomRocketConfigRequest) RoomRocketConfig { + // 房间火箭配置按 App 隔离;更新请求体不让前端传 app_code,必须使用中间件写入的上下文值。 + return RoomRocketConfig{ + AppCode: appctx.FromContext(ctx), + Enabled: req.Enabled, + FuelSource: req.FuelSource, + LaunchDelayMS: req.LaunchDelayMS, + BroadcastEnabled: req.BroadcastEnabled, + BroadcastScope: req.BroadcastScope, + BroadcastDelayMS: req.BroadcastDelayMS, + RewardStackPolicy: req.RewardStackPolicy, + Levels: req.Levels, + GiftFuelRules: req.GiftFuelRules, + } +} + func defaultConfig(appCode string) RoomRocketConfig { levels := make([]RoomRocketLevelConfig, 0, roomRocketLevelCount) for index, threshold := range defaultLevelFuelThresholds { diff --git a/server/admin/internal/modules/roomrocket/service_test.go b/server/admin/internal/modules/roomrocket/service_test.go index 18af318c..e2f3da1e 100644 --- a/server/admin/internal/modules/roomrocket/service_test.go +++ b/server/admin/internal/modules/roomrocket/service_test.go @@ -1,10 +1,24 @@ package roomrocket import ( + "context" "errors" "testing" + + "hyapp-admin-server/internal/appctx" ) +func TestConfigFromUpdateRequestUsesContextAppCode(t *testing.T) { + request := updateRoomRocketConfigRequest{Levels: defaultConfig("ignored").Levels} + config := configFromUpdateRequest(appctx.WithContext(context.Background(), "LALU"), request) + if config.AppCode != "lalu" { + t.Fatalf("config app code should come from context: %+v", config) + } + if _, err := normalizeConfig(config); err != nil { + t.Fatalf("normalizeConfig should accept context app code: %v", err) + } +} + func TestNormalizeConfigDefaultsAndSortsLevels(t *testing.T) { config, err := normalizeConfig(RoomRocketConfig{ AppCode: "lalu",