package app import ( "blazing/cool" configservice "blazing/modules/config/service" playerservice "blazing/modules/player/service" "context" "strings" "time" "github.com/gogf/gf/v2/frame/g" ) type CdkController struct { *cool.Controller } // init 注册用户态CDK相关Web接口。 func init() { controller := &CdkController{ &cool.Controller{ Prefix: "/seer/game/cdk", Api: []string{}, Service: configservice.NewCdkService(), }, } cool.RegisterController(controller) } type DonationServerListReq struct { g.Meta `path:"/donation/serverIds" method:"GET"` } type DonationServerInfoReq struct { g.Meta `path:"/donation/serverInfo" method:"GET"` ServerID uint32 `json:"server_id" v:"required|min:1#服务器ID不能为空|服务器ID非法"` } type DonationServerInfoRes struct { ServerID uint32 `json:"server_id"` ServerName string `json:"server_name"` Remark string `json:"remark"` } type DonationRedeemReq struct { g.Meta `path:"/donation/redeem" method:"POST"` CDKCode string `json:"cdk_code" v:"required#CDK不能为空"` ServerID uint32 `json:"server_id" v:"required|min:1#服务器ID不能为空|服务器ID非法"` ServerName string `json:"server_name" v:"required#服务器名称不能为空"` } type DonationRedeemRes struct { ServerID uint32 `json:"server_id"` ServerName string `json:"server_name"` OwnerID uint32 `json:"owner_id"` ServerExpireTime time.Time `json:"server_expire_time"` } // DonationServerIDs 查询当前可用于服务器绑定CDK的服务器ID列表。 func (c *CdkController) DonationServerIDs(ctx context.Context, req *DonationServerListReq) (res *cool.BaseRes, err error) { admin := cool.GetAdmin(ctx) if admin == nil || admin.UserId == 0 { return cool.Fail("未登录或登录已失效"), nil } return cool.Ok(g.Map{ "server_ids": configservice.NewServerService().GetDonationAvailableServerIDs(), }), nil } // DonationServerInfo 查询冠名兑换前展示的服务器名称与备注。 func (c *CdkController) DonationServerInfo(ctx context.Context, req *DonationServerInfoReq) (res *cool.BaseRes, err error) { if err = g.Validator().Data(req).Run(ctx); err != nil { return cool.Fail(err.Error()), nil } admin := cool.GetAdmin(ctx) if admin == nil || admin.UserId == 0 { return cool.Fail("未登录或登录已失效"), nil } server := configservice.NewServerService().GetServerID(req.ServerID) if server.OnlineID == 0 { return cool.Fail("服务器不存在"), nil } return cool.Ok(&DonationServerInfoRes{ ServerID: server.OnlineID, ServerName: server.Name, Remark: server.Desc, }), nil } // DonationRedeem 兑换服务器绑定类型CDK并完成冠名写入。 func (c *CdkController) DonationRedeem(ctx context.Context, req *DonationRedeemReq) (res *cool.BaseRes, err error) { if err = g.Validator().Data(req).Run(ctx); err != nil { return cool.Fail(err.Error()), nil } admin := cool.GetAdmin(ctx) if admin == nil || admin.UserId == 0 { return cool.Fail("未登录或登录已失效"), nil } ownerID := uint32(admin.UserId) cdkCode := strings.TrimSpace(req.CDKCode) if cdkCode == "" { return cool.Fail("CDK不能为空"), nil } serverName := strings.TrimSpace(req.ServerName) serverName = strings.Trim(cool.Filter.Replace(serverName, '*'), "*") if serverName == "" { return cool.Fail("服务器名称不能为空"), nil } cdkService := configservice.NewCdkService() cdkInfo := cdkService.Get(cdkCode) if cdkInfo == nil { return cool.Fail("CDK不存在或已被使用"), nil } if cdkInfo.CDKType != configservice.CDKTypeServerNaming { return cool.Fail("CDK类型不匹配"), nil } if cdkInfo.BindUserId != 0 && cdkInfo.BindUserId != ownerID { return cool.Fail("CDK已绑定其他用户"), nil } if !cdkInfo.ValidEndTime.IsZero() && cdkInfo.ValidEndTime.Before(time.Now()) { return cool.Fail("CDK已过期"), nil } playerCdkService := playerservice.NewCdkService(ownerID) if !playerCdkService.CanGet(uint32(cdkInfo.ID)) { return cool.Fail("CDK已领取"), nil } serverInfo, useErr := cdkService.UseServerNamingCDK(ctx, cdkCode, ownerID, req.ServerID, serverName) if useErr != nil { return cool.Fail(useErr.Error()), nil } playerCdkService.Log(uint32(cdkInfo.ID)) return cool.Ok(&DonationRedeemRes{ ServerID: serverInfo.ServerID, ServerName: serverInfo.ServerName, OwnerID: serverInfo.OwnerID, ServerExpireTime: serverInfo.ServerExpireTime, }), nil }