common.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package gwtools
  2. import (
  3. "encoding/json"
  4. "git.sxidc.com/go-framework/baize/framework/core/api"
  5. "git.sxidc.com/go-framework/baize/framework/gateway"
  6. "git.sxidc.com/service-supports/fserr"
  7. )
  8. type TenantInfo interface {
  9. GetID() string
  10. }
  11. type UserInfo interface {
  12. GetID() string
  13. }
  14. type GetTenantInfoFunc func(c *api.Context) (TenantInfo, error)
  15. type GetUserInfoFunc func(c *api.Context) (UserInfo, error)
  16. func AddBodyTenantIDAndUserID(tenantIDFieldName string, userIDFieldName string,
  17. getTenantIDFunc GetTenantInfoFunc, getUserIDFunc GetUserInfoFunc) gateway.FormBodyFunc {
  18. return func(c *api.Context, historyRequests []gateway.BuilderRequest, customResultMap map[string]any) (any, error) {
  19. body, err := gateway.DefaultFormBodyFunc(c, historyRequests, customResultMap)
  20. if err != nil {
  21. return nil, err
  22. }
  23. if getTenantIDFunc == nil && getUserIDFunc == nil {
  24. return body, nil
  25. }
  26. bodyBytes, ok := body.([]byte)
  27. if !ok {
  28. return nil, fserr.New("body不是json")
  29. }
  30. bodyMap := make(map[string]any)
  31. err = json.Unmarshal(bodyBytes, &bodyMap)
  32. if err != nil {
  33. return nil, err
  34. }
  35. if getTenantIDFunc != nil {
  36. _, ok := bodyMap[tenantIDFieldName]
  37. if !ok {
  38. tenantID, err := getTenantIDFunc(c)
  39. if err != nil {
  40. return nil, err
  41. }
  42. bodyMap[tenantIDFieldName] = tenantID
  43. }
  44. }
  45. if getUserIDFunc != nil {
  46. _, ok := bodyMap[userIDFieldName]
  47. if !ok {
  48. userID, err := getUserIDFunc(c)
  49. if err != nil {
  50. return nil, err
  51. }
  52. bodyMap[userIDFieldName] = userID
  53. }
  54. }
  55. newBody, err := json.Marshal(bodyMap)
  56. if err != nil {
  57. return nil, err
  58. }
  59. err = c.ReplaceBody(newBody)
  60. if err != nil {
  61. return nil, err
  62. }
  63. return newBody, nil
  64. }
  65. }
  66. func AddQueryParamsTenantIDAndUserID(tenantIDFieldName string, userIDFieldName string,
  67. getTenantIDFunc GetTenantInfoFunc, getUserIDFunc GetUserInfoFunc) gateway.FormQueryParamsFunc {
  68. return func(c *api.Context, historyRequests []gateway.BuilderRequest, customResultMap map[string]any) (map[string]string, error) {
  69. queryParams, err := gateway.DefaultFormQueryParamsFunc(c, historyRequests, customResultMap)
  70. if err != nil {
  71. return nil, err
  72. }
  73. if getTenantIDFunc == nil && getUserIDFunc == nil {
  74. return queryParams, nil
  75. }
  76. if getTenantIDFunc != nil {
  77. _, ok := queryParams[tenantIDFieldName]
  78. if !ok {
  79. tenantInfo, err := getTenantIDFunc(c)
  80. if err != nil {
  81. return nil, err
  82. }
  83. queryParams[tenantIDFieldName] = tenantInfo.GetID()
  84. }
  85. }
  86. if getUserIDFunc != nil {
  87. _, ok := queryParams[userIDFieldName]
  88. if !ok {
  89. userInfo, err := getUserIDFunc(c)
  90. if err != nil {
  91. return nil, err
  92. }
  93. queryParams[userIDFieldName] = userInfo.GetID()
  94. }
  95. }
  96. return queryParams, nil
  97. }
  98. }