101 lines
3.8 KiB
Go
101 lines
3.8 KiB
Go
package appconfig
|
||
|
||
import (
|
||
"context"
|
||
"errors"
|
||
"fmt"
|
||
"time"
|
||
|
||
"hyapp-admin-server/internal/appctx"
|
||
"hyapp-admin-server/internal/middleware"
|
||
"hyapp-admin-server/internal/modules/shared"
|
||
"hyapp-admin-server/internal/response"
|
||
activityv1 "hyapp.local/api/proto/activity/v1"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
type floatingScreenConfigRequest struct {
|
||
Enabled bool `json:"enabled"`
|
||
GameWinMinCoins int64 `json:"gameWinMinCoins" binding:"required,min=1,max=1000000000000"`
|
||
}
|
||
|
||
type floatingScreenConfigDTO struct {
|
||
AppCode string `json:"appCode"`
|
||
Enabled bool `json:"enabled"`
|
||
GameWinMinCoins int64 `json:"gameWinMinCoins"`
|
||
UpdatedByAdminID int64 `json:"updatedByAdminId"`
|
||
CreatedAtMS int64 `json:"createdAtMs"`
|
||
UpdatedAtMS int64 `json:"updatedAtMs"`
|
||
}
|
||
|
||
func (s *AppConfigService) GetFloatingScreenConfig(ctx context.Context, appCode string) (floatingScreenConfigDTO, error) {
|
||
if s == nil || s.activity == nil {
|
||
return floatingScreenConfigDTO{}, errors.New("activity broadcast config is unavailable")
|
||
}
|
||
appCode = appctx.Normalize(appCode)
|
||
resp, err := s.activity.GetGameWinBroadcastConfig(ctx, &activityv1.GetGameWinBroadcastConfigRequest{
|
||
Meta: &activityv1.RequestMeta{Caller: "admin-server", AppCode: appCode, SentAtMs: time.Now().UTC().UnixMilli()},
|
||
})
|
||
if err != nil {
|
||
return floatingScreenConfigDTO{}, err
|
||
}
|
||
return floatingScreenConfigFromProto(appCode, resp.GetConfig()), nil
|
||
}
|
||
|
||
func (s *AppConfigService) UpdateFloatingScreenConfig(ctx context.Context, appCode string, request floatingScreenConfigRequest, operatorAdminID int64) (floatingScreenConfigDTO, error) {
|
||
if s == nil || s.activity == nil {
|
||
return floatingScreenConfigDTO{}, errors.New("activity broadcast config is unavailable")
|
||
}
|
||
appCode = appctx.Normalize(appCode)
|
||
resp, err := s.activity.UpdateGameWinBroadcastConfig(ctx, &activityv1.UpdateGameWinBroadcastConfigRequest{
|
||
Meta: &activityv1.RequestMeta{Caller: "admin-server", AppCode: appCode, SentAtMs: time.Now().UTC().UnixMilli()},
|
||
Enabled: request.Enabled,
|
||
MinWinCoins: request.GameWinMinCoins,
|
||
OperatorAdminId: operatorAdminID,
|
||
})
|
||
if err != nil {
|
||
return floatingScreenConfigDTO{}, err
|
||
}
|
||
return floatingScreenConfigFromProto(appCode, resp.GetConfig()), nil
|
||
}
|
||
|
||
func floatingScreenConfigFromProto(appCode string, config *activityv1.GameWinBroadcastConfig) floatingScreenConfigDTO {
|
||
if config == nil {
|
||
return floatingScreenConfigDTO{AppCode: appctx.Normalize(appCode)}
|
||
}
|
||
return floatingScreenConfigDTO{
|
||
AppCode: appctx.Normalize(appCode),
|
||
Enabled: config.GetEnabled(),
|
||
GameWinMinCoins: config.GetMinWinCoins(),
|
||
UpdatedByAdminID: config.GetUpdatedByAdminId(),
|
||
CreatedAtMS: config.GetCreatedAtMs(),
|
||
UpdatedAtMS: config.GetUpdatedAtMs(),
|
||
}
|
||
}
|
||
|
||
func (h *Handler) GetFloatingScreenConfig(c *gin.Context) {
|
||
item, err := h.service.GetFloatingScreenConfig(c.Request.Context(), appctx.FromContext(c.Request.Context()))
|
||
if err != nil {
|
||
response.ServerError(c, "获取飘屏配置失败")
|
||
return
|
||
}
|
||
response.OK(c, item)
|
||
}
|
||
|
||
func (h *Handler) UpdateFloatingScreenConfig(c *gin.Context) {
|
||
var request floatingScreenConfigRequest
|
||
if err := c.ShouldBindJSON(&request); err != nil {
|
||
response.BadRequest(c, "中奖金币阈值必须在 1 到 1000000000000 之间")
|
||
return
|
||
}
|
||
item, err := h.service.UpdateFloatingScreenConfig(c.Request.Context(), appctx.FromContext(c.Request.Context()), request, int64(middleware.CurrentUserID(c)))
|
||
if err != nil {
|
||
response.BadRequest(c, err.Error())
|
||
return
|
||
}
|
||
// 审计记录明确保留 App、启停和阈值,便于定位一次运营调整为何改变了实时飘屏数量。
|
||
shared.OperationLog(c, h.audit, "update-game-win-floating-screen", "game_win_broadcast_configs", "success", fmt.Sprintf("app_code=%s enabled=%t min_win_coins=%d", item.AppCode, item.Enabled, item.GameWinMinCoins))
|
||
response.OK(c, item)
|
||
}
|