common.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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 GetTenantIDFunc func(c *api.Context) (string, error)
  9. type GetUserIDFunc func(c *api.Context) (string, error)
  10. func addBodyTenantIDAndUserID(tenantIDFieldName string, userIDFieldName string,
  11. getTenantIDFunc GetTenantIDFunc, getUserIDFunc GetUserIDFunc) gateway.FormBodyFunc {
  12. return func(c *api.Context, historyRequests []gateway.BuilderRequest, customResultMap map[string]any) (any, error) {
  13. body, err := gateway.DefaultFormBodyFunc(c, historyRequests, customResultMap)
  14. if err != nil {
  15. return nil, err
  16. }
  17. if getTenantIDFunc == nil && getUserIDFunc == nil {
  18. return body, nil
  19. }
  20. bodyBytes, ok := body.([]byte)
  21. if !ok {
  22. return nil, fserr.New("body不是json")
  23. }
  24. bodyMap := make(map[string]any)
  25. err = json.Unmarshal(bodyBytes, &bodyMap)
  26. if err != nil {
  27. return nil, err
  28. }
  29. if getTenantIDFunc != nil {
  30. _, ok := bodyMap[tenantIDFieldName]
  31. if !ok {
  32. tenantID, err := getTenantIDFunc(c)
  33. if err != nil {
  34. return nil, err
  35. }
  36. bodyMap[tenantIDFieldName] = tenantID
  37. }
  38. }
  39. if getUserIDFunc != nil {
  40. _, ok := bodyMap[userIDFieldName]
  41. if !ok {
  42. userID, err := getUserIDFunc(c)
  43. if err != nil {
  44. return nil, err
  45. }
  46. bodyMap[userIDFieldName] = userID
  47. }
  48. }
  49. newBody, err := json.Marshal(bodyMap)
  50. if err != nil {
  51. return nil, err
  52. }
  53. err = c.ReplaceBody(newBody)
  54. if err != nil {
  55. return nil, err
  56. }
  57. return newBody, nil
  58. }
  59. }
  60. func addQueryParamsTenantIDAndUserID(tenantIDFieldName string, userIDFieldName string,
  61. getTenantIDFunc GetTenantIDFunc, getUserIDFunc GetUserIDFunc) gateway.FormQueryParamsFunc {
  62. return func(c *api.Context, historyRequests []gateway.BuilderRequest, customResultMap map[string]any) (map[string]string, error) {
  63. queryParams, err := gateway.DefaultFormQueryParamsFunc(c, historyRequests, customResultMap)
  64. if err != nil {
  65. return nil, err
  66. }
  67. if getTenantIDFunc == nil && getUserIDFunc == nil {
  68. return queryParams, nil
  69. }
  70. if getTenantIDFunc != nil {
  71. _, ok := queryParams[tenantIDFieldName]
  72. if !ok {
  73. tenantID, err := getTenantIDFunc(c)
  74. if err != nil {
  75. return nil, err
  76. }
  77. queryParams[tenantIDFieldName] = tenantID
  78. }
  79. }
  80. if getUserIDFunc != nil {
  81. _, ok := queryParams[userIDFieldName]
  82. if !ok {
  83. userID, err := getUserIDFunc(c)
  84. if err != nil {
  85. return nil, err
  86. }
  87. queryParams[userIDFieldName] = userID
  88. }
  89. }
  90. return queryParams, nil
  91. }
  92. }