62 lines
2.1 KiB
Go
62 lines
2.1 KiB
Go
package model
|
||
|
||
import (
|
||
"admin/internal/consts"
|
||
"admin/internal/db"
|
||
"admin/internal/global"
|
||
"admin/internal/model/dto"
|
||
"errors"
|
||
"gorm.io/gorm"
|
||
"time"
|
||
)
|
||
|
||
func init() {
|
||
db.RegisterTableModels(Project{})
|
||
}
|
||
|
||
// Project 游戏项目,例如神谕、神魔大陆
|
||
type Project struct {
|
||
ID int `gorm:"primarykey" readonly:"true"`
|
||
ProjectType string `gorm:"type:varchar(255);uniqueIndex:project" name:"项目类型" choices:"GetProjectChoices" uneditable:"true" required:"true"`
|
||
Name string `gorm:"primarykey;uniqueIndex:project" required:"true" name:"项目名" desc:"例如神魔大陆-正式服、神魔大陆-主播服" uneditable:"true"`
|
||
Desc string `name:"项目描述"`
|
||
// command_list接口服务器地址,为空代表由由项目下各个逻辑服提供command_list.
|
||
// 取决于每个项目改造难度:
|
||
// 不为空就代表项目要实现一个自己统一对外暴露的gm调用服务对内聚合、分发指令执行,本后台执行指令只调用一次;
|
||
// 为空就代表command_list实现在各个逻辑服,由本后台系统在执行指令时聚合、分发指令
|
||
// 调用各个逻辑服执行,本后台执行指令需要根据逻辑服数量调用;
|
||
ApiAddr string `name:"游戏api地址" desc:"api服务器地址,例如神魔大陆就是alisrv服务器地址,用于后台调用gm"`
|
||
SortWeight int `name:"菜单排序" desc:"越大越靠前"`
|
||
CreatedAt time.Time `readonly:"true"`
|
||
UpdatedAt time.Time `readonly:"true"`
|
||
}
|
||
|
||
func (lm *Project) TableName() string {
|
||
return "project"
|
||
}
|
||
|
||
func (m *Project) GetId() int {
|
||
return m.ID
|
||
}
|
||
|
||
func (m *Project) GetShowKey() string {
|
||
return m.Name
|
||
}
|
||
|
||
func (m *Project) GetProjectChoices(_ *Project) []*dto.CommonDtoFieldChoice {
|
||
return []*dto.CommonDtoFieldChoice{
|
||
{Desc: "神魔大陆", Value: consts.RegisteredProjectId_shenmodalu, Type: 0},
|
||
}
|
||
}
|
||
|
||
func (p *Project) GetByID() (bool, error) {
|
||
err := global.GLOB_DB.Where("id=?", p.ID).First(p).Error
|
||
if err != nil {
|
||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||
return false, nil
|
||
}
|
||
return false, err
|
||
}
|
||
return true, nil
|
||
}
|