value_object_crud.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package gwtools
  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/template"
  6. "github.com/iancoleman/strcase"
  7. "net/http"
  8. )
  9. func ValueObjectCRUD(builder *gateway.Builder, params *ValueObjectCRUDParams, opts ...any) {
  10. createOptions := new(ValueObjectCRUDCreateOptions)
  11. deleteOptions := new(ValueObjectCRUDDeleteOptions)
  12. queryOptions := new(ValueObjectCRUDQueryOptions)
  13. for _, opt := range opts {
  14. switch o := opt.(type) {
  15. case ValueObjectCRUDCreateOption:
  16. o(createOptions)
  17. case ValueObjectCRUDDeleteOption:
  18. o(deleteOptions)
  19. case ValueObjectCRUDQueryOption:
  20. o(queryOptions)
  21. default:
  22. continue
  23. }
  24. }
  25. params.createOptions = createOptions
  26. params.deleteOptions = deleteOptions
  27. params.queryOptions = queryOptions
  28. params.crud(builder)
  29. }
  30. type ValueObjectCRUDParams struct {
  31. // 除去后缀的服务URL,如http://localhost:8080/example/api/v1
  32. ServiceVersionedUrl string
  33. // 领域名称
  34. DomainCamelName string
  35. // 可选配置项,通过WithXXX配置
  36. createOptions *ValueObjectCRUDCreateOptions
  37. deleteOptions *ValueObjectCRUDDeleteOptions
  38. queryOptions *ValueObjectCRUDQueryOptions
  39. }
  40. func (params *ValueObjectCRUDParams) crud(builder *gateway.Builder) {
  41. createOptions := params.createOptions
  42. deleteOptions := params.deleteOptions
  43. queryOptions := params.queryOptions
  44. domainPath := "/" + strcase.ToLowerCamel(template.Id(params.DomainCamelName))
  45. // 创建
  46. if !createOptions.disable {
  47. builder.
  48. Url(http.MethodPost, domainPath+"/create").
  49. Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/create",
  50. gateway.PostRequestWithBodyForm(
  51. gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId"))),
  52. createOptions.requestResponseCallback).
  53. Build(createOptions.middlewares...)
  54. }
  55. // 删除
  56. if !deleteOptions.disable {
  57. builder.
  58. Url(http.MethodPost, domainPath+"/delete").
  59. Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/delete"),
  60. deleteOptions.requestResponseCallback).
  61. Build(deleteOptions.middlewares...)
  62. }
  63. // 查询
  64. if !queryOptions.disable {
  65. builder.
  66. Url(http.MethodGet, domainPath+"/query").
  67. Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/query",
  68. gateway.GetRequestWithQueryParamsForm(
  69. gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""))),
  70. queryOptions.requestResponseCallback).
  71. Build(queryOptions.middlewares...)
  72. }
  73. }
  74. type ValueObjectCRUDCreateOption func(options *ValueObjectCRUDCreateOptions)
  75. type ValueObjectCRUDDeleteOption func(options *ValueObjectCRUDDeleteOptions)
  76. type ValueObjectCRUDQueryOption func(options *ValueObjectCRUDQueryOptions)
  77. type ValueObjectCRUDCreateOptions struct {
  78. // 关闭创建
  79. disable bool
  80. // 创建请求响应回调
  81. requestResponseCallback gateway.RequestResponseCallback
  82. // 创建中间件
  83. middlewares []api.Handler
  84. }
  85. type ValueObjectCRUDDeleteOptions struct {
  86. // 关闭删除
  87. disable bool
  88. // 删除请求响应回调
  89. requestResponseCallback gateway.RequestResponseCallback
  90. // 删除中间件
  91. middlewares []api.Handler
  92. }
  93. type ValueObjectCRUDQueryOptions struct {
  94. // 关闭查询
  95. disable bool
  96. // 查询请求响应回调
  97. requestResponseCallback gateway.RequestResponseCallback
  98. // 查询中间件
  99. middlewares []api.Handler
  100. }
  101. func WithValueObjectCRUDCreateCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDCreateOption {
  102. return func(options *ValueObjectCRUDCreateOptions) {
  103. options.requestResponseCallback = callbacks
  104. }
  105. }
  106. func WithValueObjectCRUDCreateMiddlewares(middlewares []api.Handler) ValueObjectCRUDCreateOption {
  107. return func(options *ValueObjectCRUDCreateOptions) {
  108. options.middlewares = middlewares
  109. }
  110. }
  111. func WithValueObjectCRUDDisableDelete() ValueObjectCRUDDeleteOption {
  112. return func(options *ValueObjectCRUDDeleteOptions) {
  113. options.disable = true
  114. }
  115. }
  116. func WithValueObjectCRUDDeleteCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDDeleteOption {
  117. return func(options *ValueObjectCRUDDeleteOptions) {
  118. options.requestResponseCallback = callbacks
  119. }
  120. }
  121. func WithValueObjectCRUDDeleteMiddlewares(middlewares []api.Handler) ValueObjectCRUDDeleteOption {
  122. return func(options *ValueObjectCRUDDeleteOptions) {
  123. options.middlewares = middlewares
  124. }
  125. }
  126. func WithValueObjectCRUDDisableQuery() ValueObjectCRUDQueryOption {
  127. return func(options *ValueObjectCRUDQueryOptions) {
  128. options.disable = true
  129. }
  130. }
  131. func WithValueObjectCRUDQueryCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDQueryOption {
  132. return func(options *ValueObjectCRUDQueryOptions) {
  133. options.requestResponseCallback = callbacks
  134. }
  135. }
  136. func WithValueObjectCRUDQueryMiddlewares(middlewares []api.Handler) ValueObjectCRUDQueryOption {
  137. return func(options *ValueObjectCRUDQueryOptions) {
  138. options.middlewares = middlewares
  139. }
  140. }