sys_api.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package models
  2. import (
  3. "IotAdmin/common/models"
  4. "IotAdmin/core/logger"
  5. "bytes"
  6. "encoding/json"
  7. "fmt"
  8. "os"
  9. "regexp"
  10. "strings"
  11. "IotAdmin/core/sdk"
  12. "IotAdmin/core/sdk/runtime"
  13. "IotAdmin/core/storage"
  14. "github.com/bitly/go-simplejson"
  15. )
  16. type SysApi struct {
  17. Id int `json:"id" gorm:"primaryKey;autoIncrement;comment:主键编码"`
  18. Handle string `json:"handle" gorm:"size:128;comment:handle"`
  19. Title string `json:"title" gorm:"size:128;comment:标题"`
  20. Path string `json:"path" gorm:"size:128;comment:地址"`
  21. Action string `json:"action" gorm:"size:16;comment:请求类型"`
  22. Type string `json:"type" gorm:"size:16;comment:接口类型"`
  23. models.ControlBy
  24. models.ModelTime
  25. }
  26. func (*SysApi) TableName() string {
  27. return "sys_api"
  28. }
  29. func (e *SysApi) Generate() models.ActiveRecord {
  30. o := *e
  31. return &o
  32. }
  33. func (e *SysApi) GetId() interface{} {
  34. return e.Id
  35. }
  36. func SaveSysApi(message storage.Message) (err error) {
  37. var rb []byte
  38. rb, err = json.Marshal(message.GetValues())
  39. if err != nil {
  40. err = fmt.Errorf("json Marshal error, %v", err.Error())
  41. return err
  42. }
  43. var l runtime.Routers
  44. err = json.Unmarshal(rb, &l)
  45. if err != nil {
  46. err = fmt.Errorf("json Unmarshal error, %s", err.Error())
  47. return err
  48. }
  49. dbList := sdk.Runtime.GetDb()
  50. // 根据接口方法注释里的@Summary填充接口名称,适用于代码生成器
  51. // 可在此处增加配置路径前缀的if判断,只对代码生成的自建应用进行定向的接口名称填充
  52. jsonFile, _ := os.ReadFile("docs/admin/admin_swagger.json")
  53. jsonData, _ := simplejson.NewFromReader(bytes.NewReader(jsonFile))
  54. for _, d := range dbList {
  55. for _, v := range l.List {
  56. if v.HttpMethod != "HEAD" ||
  57. strings.Contains(v.RelativePath, "/swagger/") ||
  58. strings.Contains(v.RelativePath, "/static/") ||
  59. strings.Contains(v.RelativePath, "/form-generator/") ||
  60. strings.Contains(v.RelativePath, "/sys/tables") {
  61. urlPath := v.RelativePath
  62. idPatten := "(.*)/:(\\w+)" // 正则替换,把:id换成{id}
  63. reg, _ := regexp.Compile(idPatten)
  64. if reg.MatchString(urlPath) {
  65. urlPath = reg.ReplaceAllString(v.RelativePath, "${1}/{${2}}") // 把:id换成{id}
  66. }
  67. temp := jsonData.Get("paths").Get(urlPath).Get(strings.ToLower(v.HttpMethod))
  68. apiTitle, _ := temp.Get("summary").String()
  69. if apiTitle == "" {
  70. logger.Debugf("ApiTitle is empty, urlPath: %s ", urlPath)
  71. continue
  72. }
  73. api := &SysApi{}
  74. err := d.Debug().Where(SysApi{Path: v.RelativePath, Action: v.HttpMethod}).
  75. Assign(SysApi{Handle: v.Handler}).
  76. FirstOrCreate(api).
  77. Error
  78. if err == nil && api.Title == "" {
  79. api.Title = apiTitle
  80. err = d.Debug().Model(api).Updates(api).Error
  81. }
  82. if err != nil {
  83. err := fmt.Errorf("Models SaveSysApi error: %s \r\n ", err.Error())
  84. return err
  85. }
  86. }
  87. }
  88. }
  89. return nil
  90. }