execute.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package upgrade
  2. import (
  3. "net/http"
  4. "github.com/xinliangnote/go-gin-api/internal/code"
  5. "github.com/xinliangnote/go-gin-api/internal/pkg/core"
  6. "github.com/xinliangnote/go-gin-api/internal/proposal/tablesqls"
  7. "github.com/xinliangnote/go-gin-api/pkg/errors"
  8. )
  9. type upgradeExecuteRequest struct {
  10. TableName string `form:"table_name"` // 数据表
  11. Op string `form:"op"` // 操作类型
  12. }
  13. func (h *handler) UpgradeExecute() core.HandlerFunc {
  14. upgradeTableList := map[string]map[string]string{
  15. "authorized": {
  16. "table_sql": tablesqls.CreateAuthorizedTableSql(),
  17. "table_data_sql": tablesqls.CreateAuthorizedTableDataSql(),
  18. },
  19. "authorized_api": {
  20. "table_sql": tablesqls.CreateAuthorizedAPITableSql(),
  21. "table_data_sql": tablesqls.CreateAuthorizedAPITableDataSql(),
  22. },
  23. "admin": {
  24. "table_sql": tablesqls.CreateAdminTableSql(),
  25. "table_data_sql": tablesqls.CreateAdminTableDataSql(),
  26. },
  27. "admin_menu": {
  28. "table_sql": tablesqls.CreateAdminMenuTableSql(),
  29. "table_data_sql": tablesqls.CreateAdminMenuTableDataSql(),
  30. },
  31. "menu": {
  32. "table_sql": tablesqls.CreateMenuTableSql(),
  33. "table_data_sql": tablesqls.CreateMenuTableDataSql(),
  34. },
  35. "menu_action": {
  36. "table_sql": tablesqls.CreateMenuActionTableSql(),
  37. "table_data_sql": tablesqls.CreateMenuActionTableDataSql(),
  38. },
  39. "cron_task": {
  40. "table_sql": tablesqls.CreateCronTaskTableSql(),
  41. "table_data_sql": "",
  42. },
  43. }
  44. upgradeTableOp := map[string]bool{
  45. "table": true,
  46. "table_data": true,
  47. }
  48. return func(ctx core.Context) {
  49. req := new(upgradeExecuteRequest)
  50. if err := ctx.ShouldBindForm(req); err != nil {
  51. ctx.AbortWithError(core.Error(
  52. http.StatusBadRequest,
  53. code.ParamBindError,
  54. code.Text(code.ParamBindError)).WithError(err),
  55. )
  56. return
  57. }
  58. outPutString := ""
  59. db := h.db.GetDbW()
  60. if upgradeTableList[req.TableName] == nil {
  61. ctx.AbortWithError(core.Error(
  62. http.StatusBadRequest,
  63. code.MySQLExecError,
  64. code.Text(code.MySQLExecError)).WithError(errors.New("数据表不存在")),
  65. )
  66. return
  67. }
  68. if !upgradeTableOp[req.Op] {
  69. ctx.AbortWithError(core.Error(
  70. http.StatusBadRequest,
  71. code.MySQLExecError,
  72. code.Text(code.MySQLExecError)).WithError(errors.New("非法操作")),
  73. )
  74. return
  75. }
  76. if req.Op == "table" {
  77. if err := db.Exec(upgradeTableList[req.TableName]["table_sql"]).Error; err != nil {
  78. ctx.AbortWithError(core.Error(
  79. http.StatusBadRequest,
  80. code.MySQLExecError,
  81. code.Text(code.MySQLExecError)+" "+err.Error()).WithError(err),
  82. )
  83. return
  84. }
  85. outPutString = "初始化 MySQL 数据表:" + req.TableName + " 成功。"
  86. } else if req.Op == "table_data" {
  87. if err := db.Exec(upgradeTableList[req.TableName]["table_data_sql"]).Error; err != nil {
  88. ctx.AbortWithError(core.Error(
  89. http.StatusBadRequest,
  90. code.MySQLExecError,
  91. code.Text(code.MySQLExecError)+" "+err.Error()).WithError(err),
  92. )
  93. return
  94. }
  95. outPutString = "初始化 MySQL 数据表:" + req.TableName + " 默认数据成功。"
  96. }
  97. ctx.Payload(outPutString)
  98. }
  99. }