All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
feat(fight): 使用专用函数构建战斗结束数据包 为战斗结束消息创建专用的构建函数, 统一处理战斗结束信息的数据包构建逻辑, 提高代码的一致性和可维护性。 fix(config): 优化数据库查询语句以提高性能 将数组包含操作(@>)替换为 ANY 操作符, 在 Egg、MapPit、PetFusion 等服务中使用更高效 的查询方式
69 lines
1.2 KiB
Go
69 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"blazing/cool"
|
|
"blazing/modules/player/model"
|
|
"fmt"
|
|
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
)
|
|
|
|
type TitleService struct {
|
|
BaseService
|
|
}
|
|
|
|
func (s *TitleService) Get() []uint32 {
|
|
m1 := s.dbm(s.Model)
|
|
|
|
var talks *model.Title
|
|
|
|
m1.Scan(&talks)
|
|
if talks == nil {
|
|
return []uint32{}
|
|
}
|
|
return talks.AvailableTitle
|
|
}
|
|
|
|
func (s *TitleService) Can(id uint32) bool {
|
|
m1 := s.dbm(s.Model)
|
|
|
|
ok, _ := m1.Wheref(`CAST(? AS text) = ANY(ARRAY(SELECT jsonb_array_elements_text(available_title)))`, id).Exist()
|
|
|
|
return ok
|
|
}
|
|
|
|
func (s *TitleService) Give(id uint32) bool {
|
|
m1, _ := s.dbm(s.Model).Exist()
|
|
|
|
if !m1 {
|
|
m := s.dbm(s.Model)
|
|
data := g.Map{
|
|
"player_id": s.userid,
|
|
"available_title": []uint32{id},
|
|
"is_vip": cool.Config.ServerInfo.IsVip,
|
|
}
|
|
|
|
m.Data(data).Insert()
|
|
return true
|
|
}
|
|
m := s.dbm(s.Model)
|
|
|
|
m.Data(g.Map{
|
|
"available_title": gdb.Raw(fmt.Sprintf("available_title|| '%d'::jsonb", id)),
|
|
}).Update()
|
|
|
|
return true
|
|
}
|
|
|
|
func NewTitleService(id uint32) *TitleService {
|
|
return &TitleService{
|
|
|
|
BaseService: BaseService{userid: id,
|
|
|
|
Service: &cool.Service{Model: model.NewPlayerTitle()},
|
|
},
|
|
}
|
|
|
|
}
|