sys_auto_code.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package system
  2. import (
  3. "errors"
  4. "fmt"
  5. "golang.org/x/text/cases"
  6. "golang.org/x/text/language"
  7. "net/url"
  8. "os"
  9. "strings"
  10. "log-server/global"
  11. "log-server/model/common/response"
  12. "log-server/model/system"
  13. "log-server/utils"
  14. "github.com/gin-gonic/gin"
  15. "go.uber.org/zap"
  16. )
  17. type AutoCodeApi struct{}
  18. var caser = cases.Title(language.English)
  19. // PreviewTemp
  20. // @Tags AutoCode
  21. // @Summary 预览创建后的代码
  22. // @Security ApiKeyAuth
  23. // @accept application/json
  24. // @Produce application/json
  25. // @Param data body system.AutoCodeStruct true "预览创建代码"
  26. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "预览创建后的代码"
  27. // @Router /autoCode/preview [post]
  28. func (autoApi *AutoCodeApi) PreviewTemp(c *gin.Context) {
  29. var a system.AutoCodeStruct
  30. _ = c.ShouldBindJSON(&a)
  31. if err := utils.Verify(a, utils.AutoCodeVerify); err != nil {
  32. response.FailWithMessage(err.Error(), c)
  33. return
  34. }
  35. a.KeyWord() // 处理go关键字
  36. a.PackageT = caser.String(a.Package)
  37. autoCode, err := autoCodeService.PreviewTemp(a)
  38. if err != nil {
  39. global.GVA_LOG.Error("预览失败!", zap.Error(err))
  40. response.FailWithMessage("预览失败", c)
  41. } else {
  42. response.OkWithDetailed(gin.H{"autoCode": autoCode}, "预览成功", c)
  43. }
  44. }
  45. // CreateTemp
  46. // @Tags AutoCode
  47. // @Summary 自动代码模板
  48. // @Security ApiKeyAuth
  49. // @accept application/json
  50. // @Produce application/json
  51. // @Param data body system.AutoCodeStruct true "创建自动代码"
  52. // @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
  53. // @Router /autoCode/createTemp [post]
  54. func (autoApi *AutoCodeApi) CreateTemp(c *gin.Context) {
  55. var a system.AutoCodeStruct
  56. _ = c.ShouldBindJSON(&a)
  57. if err := utils.Verify(a, utils.AutoCodeVerify); err != nil {
  58. response.FailWithMessage(err.Error(), c)
  59. return
  60. }
  61. a.KeyWord() // 处理go关键字
  62. var apiIds []uint
  63. if a.AutoCreateApiToSql {
  64. if ids, err := autoCodeService.AutoCreateApi(&a); err != nil {
  65. global.GVA_LOG.Error("自动化创建失败!请自行清空垃圾数据!", zap.Error(err))
  66. c.Writer.Header().Add("success", "false")
  67. c.Writer.Header().Add("msg", url.QueryEscape("自动化创建失败!请自行清空垃圾数据!"))
  68. return
  69. } else {
  70. apiIds = ids
  71. }
  72. }
  73. a.PackageT = caser.String(a.Package)
  74. err := autoCodeService.CreateTemp(a, apiIds...)
  75. if err != nil {
  76. if errors.Is(err, system.AutoMoveErr) {
  77. c.Writer.Header().Add("success", "true")
  78. c.Writer.Header().Add("msg", url.QueryEscape(err.Error()))
  79. } else {
  80. c.Writer.Header().Add("success", "false")
  81. c.Writer.Header().Add("msg", url.QueryEscape(err.Error()))
  82. _ = os.Remove("./ginvueadmin.zip")
  83. }
  84. } else {
  85. c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) // fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
  86. c.Writer.Header().Add("Content-Type", "application/json")
  87. c.Writer.Header().Add("success", "true")
  88. c.File("./ginvueadmin.zip")
  89. _ = os.Remove("./ginvueadmin.zip")
  90. }
  91. }
  92. // GetDB
  93. // @Tags AutoCode
  94. // @Summary 获取当前所有数据库
  95. // @Security ApiKeyAuth
  96. // @accept application/json
  97. // @Produce application/json
  98. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取当前所有数据库"
  99. // @Router /autoCode/getDatabase [get]
  100. func (autoApi *AutoCodeApi) GetDB(c *gin.Context) {
  101. dbs, err := autoCodeService.Database().GetDB()
  102. if err != nil {
  103. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  104. response.FailWithMessage("获取失败", c)
  105. } else {
  106. response.OkWithDetailed(gin.H{"dbs": dbs}, "获取成功", c)
  107. }
  108. }
  109. // GetTables
  110. // @Tags AutoCode
  111. // @Summary 获取当前数据库所有表
  112. // @Security ApiKeyAuth
  113. // @accept application/json
  114. // @Produce application/json
  115. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取当前数据库所有表"
  116. // @Router /autoCode/getTables [get]
  117. func (autoApi *AutoCodeApi) GetTables(c *gin.Context) {
  118. dbName := c.DefaultQuery("dbName", global.GVA_CONFIG.Mysql.Dbname)
  119. tables, err := autoCodeService.Database().GetTables(dbName)
  120. if err != nil {
  121. global.GVA_LOG.Error("查询table失败!", zap.Error(err))
  122. response.FailWithMessage("查询table失败", c)
  123. } else {
  124. response.OkWithDetailed(gin.H{"tables": tables}, "获取成功", c)
  125. }
  126. }
  127. // GetColumn
  128. // @Tags AutoCode
  129. // @Summary 获取当前表所有字段
  130. // @Security ApiKeyAuth
  131. // @accept application/json
  132. // @Produce application/json
  133. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "获取当前表所有字段"
  134. // @Router /autoCode/getColumn [get]
  135. func (autoApi *AutoCodeApi) GetColumn(c *gin.Context) {
  136. dbName := c.DefaultQuery("dbName", global.GVA_CONFIG.Mysql.Dbname)
  137. tableName := c.Query("tableName")
  138. columns, err := autoCodeService.Database().GetColumn(tableName, dbName)
  139. if err != nil {
  140. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  141. response.FailWithMessage("获取失败", c)
  142. } else {
  143. response.OkWithDetailed(gin.H{"columns": columns}, "获取成功", c)
  144. }
  145. }
  146. // CreatePackage
  147. // @Tags AutoCode
  148. // @Summary 创建package
  149. // @Security ApiKeyAuth
  150. // @accept application/json
  151. // @Produce application/json
  152. // @Param data body system.SysAutoCode true "创建package"
  153. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "创建package成功"
  154. // @Router /autoCode/createPackage [post]
  155. func (autoApi *AutoCodeApi) CreatePackage(c *gin.Context) {
  156. var a system.SysAutoCode
  157. _ = c.ShouldBindJSON(&a)
  158. if err := utils.Verify(a, utils.AutoPackageVerify); err != nil {
  159. response.FailWithMessage(err.Error(), c)
  160. return
  161. }
  162. err := autoCodeService.CreateAutoCode(&a)
  163. if err != nil {
  164. global.GVA_LOG.Error("创建成功!", zap.Error(err))
  165. response.FailWithMessage("创建失败", c)
  166. } else {
  167. response.OkWithMessage("创建成功", c)
  168. }
  169. }
  170. // GetPackage
  171. // @Tags AutoCode
  172. // @Summary 获取package
  173. // @Security ApiKeyAuth
  174. // @accept application/json
  175. // @Produce application/json
  176. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "创建package成功"
  177. // @Router /autoCode/getPackage [post]
  178. func (autoApi *AutoCodeApi) GetPackage(c *gin.Context) {
  179. pkgs, err := autoCodeService.GetPackage()
  180. if err != nil {
  181. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  182. response.FailWithMessage("获取失败", c)
  183. } else {
  184. response.OkWithDetailed(gin.H{"pkgs": pkgs}, "获取成功", c)
  185. }
  186. }
  187. // DelPackage
  188. // @Tags AutoCode
  189. // @Summary 删除package
  190. // @Security ApiKeyAuth
  191. // @accept application/json
  192. // @Produce application/json
  193. // @Param data body system.SysAutoCode true "创建package"
  194. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "删除package成功"
  195. // @Router /autoCode/delPackage [post]
  196. func (autoApi *AutoCodeApi) DelPackage(c *gin.Context) {
  197. var a system.SysAutoCode
  198. _ = c.ShouldBindJSON(&a)
  199. err := autoCodeService.DelPackage(a)
  200. if err != nil {
  201. global.GVA_LOG.Error("删除失败!", zap.Error(err))
  202. response.FailWithMessage("删除失败", c)
  203. } else {
  204. response.OkWithMessage("删除成功", c)
  205. }
  206. }
  207. // AutoPlug
  208. // @Tags AutoCode
  209. // @Summary 创建插件模板
  210. // @Security ApiKeyAuth
  211. // @accept application/json
  212. // @Produce application/json
  213. // @Param data body system.SysAutoCode true "创建插件模板"
  214. // @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "创建插件模板成功"
  215. // @Router /autoCode/createPlug [post]
  216. func (autoApi *AutoCodeApi) AutoPlug(c *gin.Context) {
  217. var a system.AutoPlugReq
  218. _ = c.ShouldBindJSON(&a)
  219. a.Snake = strings.ToLower(a.PlugName)
  220. a.NeedModel = a.HasRequest || a.HasResponse
  221. err := autoCodeService.CreatePlug(a)
  222. if err != nil {
  223. global.GVA_LOG.Error("预览失败!", zap.Error(err))
  224. response.FailWithMessage("预览失败", c)
  225. } else {
  226. response.Ok(c)
  227. }
  228. }