| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- package gwtools
- import (
- "git.sxidc.com/go-framework/baize/framework/core/api"
- "git.sxidc.com/go-framework/baize/framework/gateway"
- "git.sxidc.com/go-tools/utils/template"
- "github.com/iancoleman/strcase"
- "net/http"
- )
- func ValueObjectCRUD(builder *gateway.Builder, params *ValueObjectCRUDParams, opts ...any) {
- createOptions := new(ValueObjectCRUDCreateOptions)
- deleteOptions := new(ValueObjectCRUDDeleteOptions)
- queryOptions := new(ValueObjectCRUDQueryOptions)
- for _, opt := range opts {
- switch o := opt.(type) {
- case ValueObjectCRUDCreateOption:
- o(createOptions)
- case ValueObjectCRUDDeleteOption:
- o(deleteOptions)
- case ValueObjectCRUDQueryOption:
- o(queryOptions)
- default:
- continue
- }
- }
- params.createOptions = createOptions
- params.deleteOptions = deleteOptions
- params.queryOptions = queryOptions
- params.crud(builder)
- }
- type ValueObjectCRUDParams struct {
- // 除去后缀的服务URL,如http://localhost:8080/example/api/v1
- ServiceVersionedUrl string
- // 领域名称
- DomainCamelName string
- // 可选配置项,通过WithXXX配置
- createOptions *ValueObjectCRUDCreateOptions
- deleteOptions *ValueObjectCRUDDeleteOptions
- queryOptions *ValueObjectCRUDQueryOptions
- }
- func (params *ValueObjectCRUDParams) crud(builder *gateway.Builder) {
- createOptions := params.createOptions
- deleteOptions := params.deleteOptions
- queryOptions := params.queryOptions
- domainPath := "/" + strcase.ToLowerCamel(template.Id(params.DomainCamelName))
- // 创建
- if !createOptions.disable {
- builder.
- Url(http.MethodPost, domainPath+"/create").
- Request(func(c *api.Context, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (gateway.BuilderRequest, error) {
- err := gateway.AddJsonBodyTenantIDAndUserID(c, "tenantId", "createUserId")
- if err != nil {
- return nil, err
- }
- jsonBody, err := c.GetJsonBody()
- if err != nil {
- return nil, err
- }
- return &gateway.PostRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/create",
- Body: jsonBody.Map(),
- }, nil
- }, createOptions.requestResponseCallback).
- Build(createOptions.middlewares...)
- }
- // 删除
- if !deleteOptions.disable {
- builder.
- Url(http.MethodPost, domainPath+"/delete").
- Post(&gateway.PostRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/delete",
- }, deleteOptions.requestResponseCallback).
- Build(deleteOptions.middlewares...)
- }
- // 查询
- if !queryOptions.disable {
- builder.
- Url(http.MethodGet, domainPath+"/query").
- Request(func(c *api.Context, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (gateway.BuilderRequest, error) {
- err := gateway.AddQueryParamsTenantIDAndUserID(c, "tenantId", "")
- if err != nil {
- return nil, err
- }
- return &gateway.GetRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/query",
- QueryParams: c.GetQueryParams().Map(),
- }, nil
- }, queryOptions.requestResponseCallback).
- Build(queryOptions.middlewares...)
- }
- }
- type ValueObjectCRUDCreateOption func(options *ValueObjectCRUDCreateOptions)
- type ValueObjectCRUDDeleteOption func(options *ValueObjectCRUDDeleteOptions)
- type ValueObjectCRUDQueryOption func(options *ValueObjectCRUDQueryOptions)
- type ValueObjectCRUDCreateOptions struct {
- // 关闭创建
- disable bool
- // 创建请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 创建中间件
- middlewares []api.Handler
- }
- type ValueObjectCRUDDeleteOptions struct {
- // 关闭删除
- disable bool
- // 删除请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 删除中间件
- middlewares []api.Handler
- }
- type ValueObjectCRUDQueryOptions struct {
- // 关闭查询
- disable bool
- // 查询请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 查询中间件
- middlewares []api.Handler
- }
- func WithValueObjectCRUDCreateCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDCreateOption {
- return func(options *ValueObjectCRUDCreateOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithValueObjectCRUDCreateMiddlewares(middlewares []api.Handler) ValueObjectCRUDCreateOption {
- return func(options *ValueObjectCRUDCreateOptions) {
- options.middlewares = middlewares
- }
- }
- func WithValueObjectCRUDDisableDelete() ValueObjectCRUDDeleteOption {
- return func(options *ValueObjectCRUDDeleteOptions) {
- options.disable = true
- }
- }
- func WithValueObjectCRUDDeleteCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDDeleteOption {
- return func(options *ValueObjectCRUDDeleteOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithValueObjectCRUDDeleteMiddlewares(middlewares []api.Handler) ValueObjectCRUDDeleteOption {
- return func(options *ValueObjectCRUDDeleteOptions) {
- options.middlewares = middlewares
- }
- }
- func WithValueObjectCRUDDisableQuery() ValueObjectCRUDQueryOption {
- return func(options *ValueObjectCRUDQueryOptions) {
- options.disable = true
- }
- }
- func WithValueObjectCRUDQueryCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDQueryOption {
- return func(options *ValueObjectCRUDQueryOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithValueObjectCRUDQueryMiddlewares(middlewares []api.Handler) ValueObjectCRUDQueryOption {
- return func(options *ValueObjectCRUDQueryOptions) {
- options.middlewares = middlewares
- }
- }
|