api.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package schema
  2. import (
  3. "gorm.io/gorm"
  4. "strconv"
  5. "git.nspix.com/golang/micro/gateway/http"
  6. )
  7. func routes(db *gorm.DB, httpSvr *http.Server) {
  8. indexAction := func(ctx *http.Context) (err error) {
  9. var (
  10. tableName string
  11. moduleName string
  12. )
  13. moduleName = ctx.FormValue("module_name")
  14. if moduleName == "" {
  15. moduleName = ctx.FormValue("module")
  16. }
  17. tableName = ctx.FormValue("table_name")
  18. if tableName == "" {
  19. tableName = ctx.FormValue("table")
  20. }
  21. return ctx.Success(VisibleField(moduleName, tableName, ""))
  22. }
  23. queryAction := func(ctx *http.Context) (err error) {
  24. var (
  25. tableName string
  26. moduleName string
  27. )
  28. moduleName = ctx.ParamValue("module")
  29. tableName = ctx.ParamValue("table")
  30. fields := VisibleField(moduleName, tableName, "")
  31. values := make([]*Field, 0)
  32. for _, field := range fields {
  33. if field.Enable {
  34. values = append(values, &Field{
  35. Column: field.Column,
  36. Label: field.Label,
  37. Type: field.Type,
  38. Format: field.Format,
  39. Scenario: field.Scenario,
  40. Rules: field.Rules,
  41. Options: field.Options,
  42. })
  43. }
  44. }
  45. return ctx.Success(values)
  46. }
  47. type direct struct {
  48. Module string `json:"module_name" gorm:"column:module_name"`
  49. Table string `json:"table_name" gorm:"column:table_name"`
  50. }
  51. //directAction := func(ctx *http.Context) (err error) {
  52. // var vs []direct
  53. // db.Table("schemas").Select("module_name,table_name").Where("table_name <> ''").Group("module_name,table_name").Find(&vs)
  54. // return ctx.Success(vs)
  55. //}
  56. saveAction := func(ctx *http.Context) (err error) {
  57. vs := make([]*Schema, 0)
  58. if err = ctx.Bind(&vs); err != nil {
  59. return ctx.Error(1000, err.Error())
  60. }
  61. for _, v := range vs {
  62. if err2 := driver.SaveColumn(v); err2 != nil {
  63. return ctx.Error(8004, err2.Error())
  64. }
  65. }
  66. return ctx.Success(map[string]interface{}{
  67. "state": "success",
  68. })
  69. }
  70. deleteAction := func(ctx *http.Context) (err error) {
  71. idStr := ctx.ParamValue("id")
  72. id, _ := strconv.Atoi(idStr)
  73. if err = driver.DeleteColumn(id); err == nil {
  74. return ctx.Success(map[string]interface{}{
  75. "id": ctx.ParamValue("id"),
  76. "state": "success",
  77. })
  78. } else {
  79. return ctx.Error(8006, err.Error())
  80. }
  81. }
  82. //获取数据
  83. httpSvr.Handle("GET", "/schemas", indexAction)
  84. httpSvr.Handle("GET", "/schema/:module/:table", queryAction)
  85. //更新数据
  86. httpSvr.Handle("POST", "/schema", saveAction)
  87. httpSvr.Handle("POST", "/schema/save", saveAction)
  88. //删除数据
  89. httpSvr.Handle("DELETE", "/schema/:id", deleteAction)
  90. }