remote_driver.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package schema
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "net/http"
  7. "strconv"
  8. )
  9. type remoteResponse struct {
  10. Code int `json:"errno"`
  11. Message string `json:"errmsg"`
  12. Result json.RawMessage `json:"result"`
  13. }
  14. type RemoteDriver struct {
  15. Url string `json:"url"`
  16. }
  17. func (driver *RemoteDriver) SaveColumn(schema *Schema) (err error) {
  18. var (
  19. buf []byte
  20. req *http.Request
  21. res *http.Response
  22. )
  23. if buf, err = json.Marshal(schema); err != nil {
  24. return
  25. }
  26. if req, err = http.NewRequest("POST", driver.Url, bytes.NewReader(buf)); err != nil {
  27. return
  28. }
  29. req.Header.Set("Content-Type", "application/json")
  30. if res, err = http.DefaultClient.Do(req); err != nil {
  31. return
  32. }
  33. defer func() {
  34. _ = res.Body.Close()
  35. }()
  36. resp := &remoteResponse{}
  37. if err = json.NewDecoder(res.Body).Decode(resp); err == nil {
  38. if resp.Code != 0 {
  39. err = errors.New(resp.Message)
  40. }
  41. }
  42. return
  43. }
  44. func (driver *RemoteDriver) DeleteColumn(id int) (err error) {
  45. var (
  46. req *http.Request
  47. res *http.Response
  48. )
  49. if req, err = http.NewRequest("DELETE", driver.Url+"/"+strconv.Itoa(id), nil); err != nil {
  50. return
  51. }
  52. if res, err = http.DefaultClient.Do(req); err != nil {
  53. return
  54. }
  55. defer func() {
  56. _ = res.Body.Close()
  57. }()
  58. resp := &remoteResponse{}
  59. if err = json.NewDecoder(res.Body).Decode(resp); err == nil {
  60. if resp.Code != 0 {
  61. err = errors.New(resp.Message)
  62. }
  63. }
  64. return
  65. }
  66. func (driver *RemoteDriver) Columns(module, table string) []*Schema {
  67. var (
  68. err error
  69. req *http.Request
  70. res *http.Response
  71. )
  72. values := make([]*Schema, 0)
  73. if req, err = http.NewRequest("GET", driver.Url+"/"+module+"/"+table, nil); err != nil {
  74. return values
  75. }
  76. if res, err = http.DefaultClient.Do(req); err != nil {
  77. return values
  78. }
  79. defer func() {
  80. _ = res.Body.Close()
  81. }()
  82. resp := &remoteResponse{}
  83. if err = json.NewDecoder(res.Body).Decode(resp); err == nil {
  84. if resp.Code != 0 {
  85. err = errors.New(resp.Message)
  86. } else {
  87. err = json.Unmarshal(resp.Result, &values)
  88. }
  89. }
  90. return values
  91. }