sys_api.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package service
  2. import (
  3. "errors"
  4. "fmt"
  5. "IotAdmin/core/sdk/runtime"
  6. "IotAdmin/core/sdk/service"
  7. "gorm.io/gorm"
  8. "IotAdmin/app/system/models"
  9. "IotAdmin/app/system/service/dto"
  10. cDto "IotAdmin/common/dto"
  11. "IotAdmin/common/global"
  12. "IotAdmin/common/permission"
  13. )
  14. type SysApiService struct {
  15. service.Service
  16. }
  17. // GetPage 获取SysApi列表
  18. func (e *SysApiService) GetPage(c *dto.SysApiGetPageReq, p *permission.DataPermission, list *[]models.SysApi, count *int64) error {
  19. var err error
  20. var data models.SysApi
  21. orm := e.Orm.Debug().Model(&data).
  22. Scopes(
  23. cDto.MakeCondition(c.GetNeedSearch()),
  24. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  25. permission.Permission(data.TableName(), p),
  26. )
  27. if c.Type != "" {
  28. qType := c.Type
  29. if qType == "暂无" {
  30. qType = ""
  31. }
  32. if global.Driver == "postgres" {
  33. orm = orm.Where("type = ?", qType)
  34. } else {
  35. orm = orm.Where("`type` = ?", qType)
  36. }
  37. }
  38. err = orm.Find(list).Limit(-1).Offset(-1).
  39. Count(count).Error
  40. if err != nil {
  41. e.Log.Errorf("Service GetSysApiPage error:%s", err)
  42. return err
  43. }
  44. return nil
  45. }
  46. // Get 获取SysApi对象with id
  47. func (e *SysApiService) Get(d *dto.SysApiGetReq, p *permission.DataPermission, model *models.SysApi) *SysApiService {
  48. var data models.SysApi
  49. err := e.Orm.Model(&data).
  50. Scopes(
  51. permission.Permission(data.TableName(), p),
  52. ).
  53. First(model, d.GetId()).Error
  54. if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
  55. err = errors.New("查看对象不存在或无权查看")
  56. e.Log.Errorf("Service GetSysApi error:%s", err)
  57. _ = e.AddError(err)
  58. return e
  59. }
  60. if err != nil {
  61. e.Log.Errorf("db error:%s", err)
  62. _ = e.AddError(err)
  63. return e
  64. }
  65. return e
  66. }
  67. // Update 修改SysApi对象
  68. func (e *SysApiService) Update(c *dto.SysApiUpdateReq, p *permission.DataPermission) error {
  69. var model = models.SysApi{}
  70. db := e.Orm.Debug().First(&model, c.GetId())
  71. if db.RowsAffected == 0 {
  72. return errors.New("无权更新该数据")
  73. }
  74. c.Generate(&model)
  75. db = e.Orm.Save(&model)
  76. if err := db.Error; err != nil {
  77. e.Log.Errorf("Service UpdateSysApi error:%s", err)
  78. return err
  79. }
  80. return nil
  81. }
  82. // Remove 删除SysApi
  83. func (e *SysApiService) Remove(d *dto.SysApiDeleteReq, p *permission.DataPermission) error {
  84. var data models.SysApi
  85. db := e.Orm.Model(&data).
  86. Scopes(
  87. permission.Permission(data.TableName(), p),
  88. ).Delete(&data, d.GetId())
  89. if err := db.Error; err != nil {
  90. e.Log.Errorf("Service RemoveSysApi error:%s", err)
  91. return err
  92. }
  93. if db.RowsAffected == 0 {
  94. return errors.New("无权删除该数据")
  95. }
  96. return nil
  97. }
  98. // CheckStorageSysApi 创建SysApi对象
  99. func (e *SysApiService) CheckStorageSysApi(c *[]runtime.Router) error {
  100. for _, v := range *c {
  101. err := e.Orm.Debug().Where(models.SysApi{Path: v.RelativePath, Action: v.HttpMethod}).
  102. Attrs(models.SysApi{Handle: v.Handler}).
  103. FirstOrCreate(&models.SysApi{}).Error
  104. if err != nil {
  105. err := fmt.Errorf("Service CheckStorageSysApi error: %s \r\n ", err.Error())
  106. return err
  107. }
  108. }
  109. return nil
  110. }