package newCentralControl import ( "errors" "fmt" "gorm.io/gorm" "log-server/global" "log-server/model/common/request" "log-server/model/newCentralControl" ) type GameConfService struct { } func (s *GameConfService) CreateGameConf(conf newCentralControl.GameConf) (err error) { //查找是否存在此游戏的同名配置 var entity newCentralControl.GameConf err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("task_id = ? and conf_name = ?", conf.TaskId, conf.ConfName).First(&entity).Error //如果找到同名配置,报错 if !errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("此配置已存在,请勿重复添加") } //未找到同名配置,创建配置 return global.GVA_DB.Model(&newCentralControl.GameConf{}).Omit("create_time", "update_time").Create(&conf).Error } //删除游戏配置 func (s *GameConfService) DeleteGameConf(conf newCentralControl.GameConf) (err error) { var entity newCentralControl.GameConf err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", conf.Id).First(&entity).Error if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("此配置不存在,无法删除") } return global.GVA_DB.Model(&newCentralControl.GameConf{}).Delete(&entity).Error } //编辑游戏配置 func (s *GameConfService) UpdateGameConf(conf newCentralControl.GameConf) (err error) { var entity newCentralControl.GameConf err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("conf_name = ? and id != ?", conf.ConfName, conf.Id).First(&entity).Error if !errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("已存在相同的配置名称,无法更改") } return global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", conf.Id).Omit("create_time", "update_time").Save(&conf).Error } //通过id查询游戏配置 func (s *GameConfService) GetGameConfById(id int) (conf newCentralControl.GameConf, err error){ err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", id).First(&conf).Error return conf,err } //获取游戏配置列表 func(s *GameConfService) GetGameConfList (conf newCentralControl.GameConf, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error){ //获取limit和offset limit := info.PageSize offset := (info.Page - 1) * info.PageSize db := global.GVA_DB.Model(&newCentralControl.GameConf{}) var confList []newCentralControl.GameConf //先条件过滤 if conf.TaskId != 0 { //条件过滤记录数 db = db.Where("task_id", conf.TaskId) } err = db.Count(&total).Error if err != nil{ //如果出错直接返回 return confList, total, err } else { //先分页再排序 db = db.Limit(limit).Offset(offset) if order != ""{ //传入排序字段,进行排序 //定义orderStr存储完整的排序字段 var orderStr string //为了避免sql注入,自己创建数组匹配 orderMap := make(map[string]bool, 3) orderMap["task_id"] = true orderMap["create_time"] = true orderMap["update_time"] = true if orderMap[order] { if desc { orderStr = order + " desc" } else { orderStr = order } } else { //传入非法字段,不能排序 err = fmt.Errorf("传入非法字段 %v", order) return confList, total, err } //排序 err = db.Order(orderStr).Find(&confList).Error } else { //没有传入排序字段,默认按照类型名称降序排序 err = db.Order("id desc").Find(&confList).Error } } //是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢? return confList, total, err }