fix: pass app code when updating room rocket config

This commit is contained in:
zhx 2026-06-08 16:49:38 +08:00
parent 9c2413ca11
commit 4c41c964d2
4 changed files with 43 additions and 11 deletions

View File

@ -561,6 +561,7 @@ func roomPinFromProto(input *roomv1.AdminRoomPin) RoomPin {
func roomRocketConfigToProto(input RoomRocketConfig) *roomv1.AdminRoomRocketConfig { func roomRocketConfigToProto(input RoomRocketConfig) *roomv1.AdminRoomRocketConfig {
return &roomv1.AdminRoomRocketConfig{ return &roomv1.AdminRoomRocketConfig{
AppCode: input.AppCode,
Enabled: input.Enabled, Enabled: input.Enabled,
FuelSource: input.FuelSource, FuelSource: input.FuelSource,
LaunchDelayMs: input.LaunchDelayMS, LaunchDelayMs: input.LaunchDelayMS,

View File

@ -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())
}
}

View File

@ -7,6 +7,7 @@ import (
"slices" "slices"
"strings" "strings"
"hyapp-admin-server/internal/appctx"
"hyapp-admin-server/internal/integration/roomclient" "hyapp-admin-server/internal/integration/roomclient"
) )
@ -108,17 +109,7 @@ func (s *Service) UpdateConfig(ctx context.Context, req updateRoomRocketConfigRe
if s.roomClient == nil { if s.roomClient == nil {
return RoomRocketConfig{}, fmt.Errorf("room service client is not configured") return RoomRocketConfig{}, fmt.Errorf("room service client is not configured")
} }
config, err := normalizeConfig(RoomRocketConfig{ config, err := normalizeConfig(configFromUpdateRequest(ctx, req))
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,
})
if err != nil { if err != nil {
return RoomRocketConfig{}, err return RoomRocketConfig{}, err
} }
@ -132,6 +123,22 @@ func (s *Service) UpdateConfig(ctx context.Context, req updateRoomRocketConfigRe
return configFromClient(saved) 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 { func defaultConfig(appCode string) RoomRocketConfig {
levels := make([]RoomRocketLevelConfig, 0, roomRocketLevelCount) levels := make([]RoomRocketLevelConfig, 0, roomRocketLevelCount)
for index, threshold := range defaultLevelFuelThresholds { for index, threshold := range defaultLevelFuelThresholds {

View File

@ -1,10 +1,24 @@
package roomrocket package roomrocket
import ( import (
"context"
"errors" "errors"
"testing" "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) { func TestNormalizeConfigDefaultsAndSortsLevels(t *testing.T) {
config, err := normalizeConfig(RoomRocketConfig{ config, err := normalizeConfig(RoomRocketConfig{
AppCode: "lalu", AppCode: "lalu",