package service import ( "blazing/cool" "blazing/modules/config/model" "github.com/gogf/gf/v2/database/gdb" ) type TowerType uint32 const ( TowerType1 TowerType = 1 TowerType110 TowerType = 110 TowerType500 TowerType = 500 TowerType600 TowerType = 600 ) type TowerService struct { *cool.Service towerType TowerType tableName string } func NewTowerService(towerType TowerType) *TowerService { var tableName string switch towerType { case TowerType1: tableName = model.TableNameRarePetTowerConfig case TowerType110: tableName = model.TableNamedARKTowerConfig case TowerType500: tableName = model.TableNameTrialTowerConfig case TowerType600: tableName = model.TableNameBraveTowerConfig default: panic("unsupported tower type") } unifiedModel := &UnifiedTowerModel{ tableName: tableName, } return &TowerService{ Service: &cool.Service{Model: unifiedModel}, towerType: towerType, tableName: tableName, } } type UnifiedTowerModel struct { *cool.Model tableName string } func (m *UnifiedTowerModel) TableName() string { return m.tableName } func (m *UnifiedTowerModel) GroupName() string { return "default" } func (s *TowerService) Boss(towerLevel ...uint32) []model.BaseTowerConfig { query := dbm_enable(s.Model).WhereIn("tower_level", towerLevel).OrderAsc("tower_level") var config []model.BaseTowerConfig query.Cache(gdb.CacheOption{ Force: false, }).Scan(&config) return config } func NewTower1Service() *TowerService { return NewTowerService(TowerType1) } func NewTower110Service() *TowerService { return NewTowerService(TowerType110) } func NewTower500Service() *TowerService { return NewTowerService(TowerType500) } func NewTower600Service() *TowerService { return NewTowerService(TowerType600) }