configuration.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package configuration
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/api"
  4. "git.sxidc.com/go-framework/baize/framework/gateway"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/service-supports/fserr"
  7. "net/http"
  8. "net/url"
  9. "sync"
  10. )
  11. type Option func(options *Options)
  12. type Options struct {
  13. serviceApiVersion string
  14. }
  15. func WithServiceApiVersion(serviceApiVersion string) Option {
  16. return func(options *Options) {
  17. options.serviceApiVersion = serviceApiVersion
  18. }
  19. }
  20. var serviceBaseUrlMap sync.Map
  21. func RegisterService(serviceShortName string, baseUrl string) {
  22. serviceBaseUrlMap.Store(serviceShortName, baseUrl)
  23. }
  24. func BuildGateway(builder *gateway.Builder, opts ...Option) {
  25. options := new(Options)
  26. for _, opt := range opts {
  27. opt(options)
  28. }
  29. // 创建
  30. builder.
  31. Url(http.MethodPost, "/configuration/create").
  32. Post(gateway.NewPostRequest("",
  33. gateway.PostRequestWithUrlTransferFunc(
  34. func(c *api.Context, _ string, historyRequest []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
  35. jsonBody, err := c.GetJsonBody()
  36. if err != nil {
  37. return "", err
  38. }
  39. serviceShortName, ok := jsonBody.Get("serviceShortName").(string)
  40. if !ok {
  41. return "", fserr.New("没有传递服务名缩写或服务名缩写不是string类型")
  42. }
  43. jsonBody.Delete("serviceShortName")
  44. serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
  45. if !loaded {
  46. return "", fserr.New("没有注册对应的服务: " + serviceShortName)
  47. }
  48. var serviceUrl string
  49. if strutils.IsStringEmpty(options.serviceApiVersion) {
  50. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/create")
  51. if err != nil {
  52. return "", err
  53. }
  54. serviceUrl = innerServiceUrl
  55. } else {
  56. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/create")
  57. if err != nil {
  58. return "", err
  59. }
  60. serviceUrl = innerServiceUrl
  61. }
  62. return serviceUrl, nil
  63. })), nil).
  64. Build()
  65. // 删除
  66. builder.
  67. Url(http.MethodPost, "/configuration/delete").
  68. Post(gateway.NewPostRequest("",
  69. gateway.PostRequestWithUrlTransferFunc(
  70. func(c *api.Context, _ string, historyRequest []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
  71. jsonBody, err := c.GetJsonBody()
  72. if err != nil {
  73. return "", err
  74. }
  75. serviceShortName, ok := jsonBody.Get("serviceShortName").(string)
  76. if !ok {
  77. return "", fserr.New("没有传递服务名缩写或服务名缩写不是string类型")
  78. }
  79. jsonBody.Delete("serviceShortName")
  80. serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
  81. if !loaded {
  82. return "", fserr.New("没有注册对应的服务: " + serviceShortName)
  83. }
  84. var serviceUrl string
  85. if strutils.IsStringEmpty(options.serviceApiVersion) {
  86. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/delete")
  87. if err != nil {
  88. return "", err
  89. }
  90. serviceUrl = innerServiceUrl
  91. } else {
  92. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/delete")
  93. if err != nil {
  94. return "", err
  95. }
  96. serviceUrl = innerServiceUrl
  97. }
  98. return serviceUrl, nil
  99. })), nil).
  100. Build()
  101. // 查询
  102. builder.
  103. Url(http.MethodGet, "/configuration/values").
  104. Get(gateway.NewGetRequest("",
  105. gateway.GetRequestWithUrlTransferFunc(
  106. func(c *api.Context, _ string, historyRequest []gateway.BuilderRequest, resultMap map[string]any) (string, error) {
  107. queryParams := c.GetQueryParams()
  108. serviceShortName := queryParams.Get("serviceShortName")
  109. if strutils.IsStringEmpty(serviceShortName) {
  110. return "", fserr.New("没有传递服务名缩写")
  111. }
  112. queryParams.Delete("serviceShortName")
  113. serviceBaseUrl, loaded := serviceBaseUrlMap.Load(serviceShortName)
  114. if !loaded {
  115. return "", fserr.New("没有注册对应的服务: " + serviceShortName)
  116. }
  117. var serviceUrl string
  118. if strutils.IsStringEmpty(options.serviceApiVersion) {
  119. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/values")
  120. if err != nil {
  121. return "", err
  122. }
  123. serviceUrl = innerServiceUrl
  124. } else {
  125. innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/values")
  126. if err != nil {
  127. return "", err
  128. }
  129. serviceUrl = innerServiceUrl
  130. }
  131. return serviceUrl, nil
  132. })), nil).
  133. Build()
  134. }