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