refactor: 重构服务器冠名逻辑至独立表
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
@@ -165,7 +166,6 @@ type ServerNamingCDKResult struct {
|
||||
ServerName string
|
||||
OwnerID uint32
|
||||
ServerExpireTime time.Time
|
||||
CDKExpireTime time.Time
|
||||
}
|
||||
|
||||
// UseServerNamingCDK 使用服务器冠名类型CDK,并原子化更新服务器归属和到期时间。
|
||||
@@ -175,7 +175,7 @@ func (s *CdkService) UseServerNamingCDK(ctx context.Context, code string, ownerI
|
||||
}
|
||||
now := time.Now()
|
||||
serverService := NewServerService()
|
||||
var updated model.ServerList
|
||||
var updated model.ServerShow
|
||||
|
||||
err := g.DB(s.Model.GroupName()).Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
var cfg model.CDKConfig
|
||||
@@ -196,13 +196,13 @@ func (s *CdkService) UseServerNamingCDK(ctx context.Context, code string, ownerI
|
||||
}
|
||||
|
||||
var server model.ServerList
|
||||
if err := tx.Model(model.NewServerList()).Where("online_id", serverID).Scan(&server); err != nil {
|
||||
if err := tx.Model(model.NewServerList()).With(model.ServerShow{}).Where("online_id", serverID).Scan(&server); err != nil {
|
||||
return err
|
||||
}
|
||||
if server.OnlineID == 0 {
|
||||
return gerror.New("服务器不存在")
|
||||
}
|
||||
if server.Owner != ownerID && !serverService.CanUseDonationName(server, now) {
|
||||
if !serverService.CanUseDonationName(server, ownerID, now) {
|
||||
return gerror.New("服务器不可冠名")
|
||||
}
|
||||
|
||||
@@ -215,23 +215,40 @@ func (s *CdkService) UseServerNamingCDK(ctx context.Context, code string, ownerI
|
||||
return gerror.New("cdk已被使用")
|
||||
}
|
||||
|
||||
updated = server
|
||||
var currentShow model.ServerShow
|
||||
if server.ServerShow != nil {
|
||||
currentShow = *server.ServerShow
|
||||
}
|
||||
|
||||
updated = currentShow
|
||||
updated.ServerID = serverID
|
||||
updated.Name = serverName
|
||||
updated.Owner = ownerID
|
||||
if server.Owner != ownerID {
|
||||
updated.CDKExpireTime = now.AddDate(0, 1, 0)
|
||||
|
||||
if currentShow.ServerID == 0 || !serverService.isActiveServerShow(¤tShow, now) || currentShow.Owner != ownerID {
|
||||
updated.ExpireTime = now.AddDate(0, 1, 0)
|
||||
} else {
|
||||
baseTime := server.CDKExpireTime
|
||||
baseTime := currentShow.ExpireTime
|
||||
if baseTime.IsZero() {
|
||||
baseTime = now
|
||||
}
|
||||
updated.CDKExpireTime = baseTime.AddDate(0, 1, 0)
|
||||
updated.ExpireTime = baseTime.AddDate(0, 1, 0)
|
||||
}
|
||||
|
||||
_, err = tx.Model(model.NewServerList()).Where("online_id", serverID).Data(g.Map{
|
||||
"name": updated.Name,
|
||||
"owner": updated.Owner,
|
||||
"cdk_expire_time": updated.CDKExpireTime,
|
||||
if currentShow.ServerID == 0 {
|
||||
_, err = tx.Model(model.NewServerShow()).Data(g.Map{
|
||||
"server_id": updated.ServerID,
|
||||
"name": updated.Name,
|
||||
"owner": updated.Owner,
|
||||
"expire_time": updated.ExpireTime,
|
||||
}).Insert()
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = tx.Model(model.NewServerShow()).Where("server_id", serverID).Data(g.Map{
|
||||
"name": updated.Name,
|
||||
"owner": updated.Owner,
|
||||
"expire_time": updated.ExpireTime,
|
||||
}).Update()
|
||||
return err
|
||||
})
|
||||
@@ -241,12 +258,12 @@ func (s *CdkService) UseServerNamingCDK(ctx context.Context, code string, ownerI
|
||||
|
||||
g.DB(s.Model.GroupName()).GetCore().ClearCache(context.TODO(), s.Model.TableName())
|
||||
g.DB(model.NewServerList().GroupName()).GetCore().ClearCache(context.TODO(), model.NewServerList().TableName())
|
||||
g.DB(model.NewServerShow().GroupName()).GetCore().ClearCache(context.TODO(), model.NewServerShow().TableName())
|
||||
return &ServerNamingCDKResult{
|
||||
ServerID: updated.OnlineID,
|
||||
ServerID: updated.ServerID,
|
||||
ServerName: updated.Name,
|
||||
OwnerID: updated.Owner,
|
||||
ServerExpireTime: updated.ExpireTime,
|
||||
CDKExpireTime: updated.CDKExpireTime,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -263,6 +280,18 @@ func (s *CdkService) BatchGenerate(ctx context.Context, count int) (interface{},
|
||||
delete(requestData, "cdk_code")
|
||||
delete(requestData, "id")
|
||||
|
||||
cdkType := gconv.Uint32(requestData["type"])
|
||||
if cdkType != CDKTypeReward && cdkType != CDKTypeServerNaming {
|
||||
return nil, gerror.New("CDK类型非法")
|
||||
}
|
||||
requestData["type"] = cdkType
|
||||
if cdkType == CDKTypeServerNaming {
|
||||
requestData["exchange_remain_count"] = int64(1)
|
||||
requestData["item_reward_ids"] = []uint32{}
|
||||
requestData["elf_reward_ids"] = []uint32{}
|
||||
requestData["title_reward_ids"] = uint32(0)
|
||||
}
|
||||
|
||||
codes, err := s.generateAvailableCodes(count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user