game_conf.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package newCentralControl
  2. import (
  3. "errors"
  4. "fmt"
  5. "gorm.io/gorm"
  6. "log-server/global"
  7. "log-server/model/common/request"
  8. "log-server/model/newCentralControl"
  9. )
  10. type GameConfService struct {
  11. }
  12. func (s *GameConfService) CreateGameConf(conf newCentralControl.GameConf) (err error) {
  13. //查找是否存在此游戏的同名配置
  14. var entity newCentralControl.GameConf
  15. err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("task_id = ? and conf_name = ?", conf.TaskId, conf.ConfName).First(&entity).Error
  16. //如果找到同名配置,报错
  17. if !errors.Is(err, gorm.ErrRecordNotFound) {
  18. return errors.New("此配置已存在,请勿重复添加")
  19. }
  20. //未找到同名配置,创建配置
  21. return global.GVA_DB.Model(&newCentralControl.GameConf{}).Omit("create_time", "update_time").Create(&conf).Error
  22. }
  23. //删除游戏配置
  24. func (s *GameConfService) DeleteGameConf(conf newCentralControl.GameConf) (err error) {
  25. var entity newCentralControl.GameConf
  26. err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", conf.Id).First(&entity).Error
  27. if errors.Is(err, gorm.ErrRecordNotFound) {
  28. return errors.New("此配置不存在,无法删除")
  29. }
  30. return global.GVA_DB.Model(&newCentralControl.GameConf{}).Delete(&entity).Error
  31. }
  32. //编辑游戏配置
  33. func (s *GameConfService) UpdateGameConf(conf newCentralControl.GameConf) (err error) {
  34. var entity newCentralControl.GameConf
  35. err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("conf_name = ? and id != ?", conf.ConfName, conf.Id).First(&entity).Error
  36. if !errors.Is(err, gorm.ErrRecordNotFound) {
  37. return errors.New("已存在相同的配置名称,无法更改")
  38. }
  39. return global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", conf.Id).Omit("create_time", "update_time").Save(&conf).Error
  40. }
  41. //通过id查询游戏配置
  42. func (s *GameConfService) GetGameConfById(id int) (conf newCentralControl.GameConf, err error){
  43. err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id", id).First(&conf).Error
  44. return conf,err
  45. }
  46. //获取游戏配置列表
  47. func(s *GameConfService) GetGameConfList (conf newCentralControl.GameConf, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error){
  48. //获取limit和offset
  49. limit := info.PageSize
  50. offset := (info.Page - 1) * info.PageSize
  51. db := global.GVA_DB.Model(&newCentralControl.GameConf{})
  52. var confList []newCentralControl.GameConf
  53. //先条件过滤
  54. if conf.TaskId != 0 {
  55. //条件过滤记录数
  56. db = db.Where("task_id", conf.TaskId)
  57. }
  58. err = db.Count(&total).Error
  59. if err != nil{
  60. //如果出错直接返回
  61. return confList, total, err
  62. } else {
  63. //先分页再排序
  64. db = db.Limit(limit).Offset(offset)
  65. if order != ""{
  66. //传入排序字段,进行排序
  67. //定义orderStr存储完整的排序字段
  68. var orderStr string
  69. //为了避免sql注入,自己创建数组匹配
  70. orderMap := make(map[string]bool, 3)
  71. orderMap["task_id"] = true
  72. orderMap["create_time"] = true
  73. orderMap["update_time"] = true
  74. if orderMap[order] {
  75. if desc {
  76. orderStr = order + " desc"
  77. } else {
  78. orderStr = order
  79. }
  80. } else {
  81. //传入非法字段,不能排序
  82. err = fmt.Errorf("传入非法字段 %v", order)
  83. return confList, total, err
  84. }
  85. //排序
  86. err = db.Order(orderStr).Find(&confList).Error
  87. } else {
  88. //没有传入排序字段,默认按照类型名称降序排序
  89. err = db.Order("id desc").Find(&confList).Error
  90. }
  91. }
  92. //是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢?
  93. return confList, total, err
  94. }