| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- 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 CRUD(builder *gateway.Builder, params *CRUDParams, opts ...any) {
- createOptions := new(CRUDCreateOptions)
- deleteOptions := new(CRUDDeleteOptions)
- updateOptions := new(CRUDUpdateOptions)
- queryOptions := new(CRUDQueryOptions)
- getByIDOptions := new(CRUDGetByIDOptions)
- for _, opt := range opts {
- switch o := opt.(type) {
- case CRUDCreateOption:
- o(createOptions)
- case CRUDDeleteOption:
- o(deleteOptions)
- case CRUDUpdateOption:
- o(updateOptions)
- case CRUDQueryOption:
- o(queryOptions)
- case CRUDGetByIDOption:
- o(getByIDOptions)
- default:
- continue
- }
- }
- params.createOptions = createOptions
- params.deleteOptions = deleteOptions
- params.updateOptions = updateOptions
- params.queryOptions = queryOptions
- params.getByIDOptions = getByIDOptions
- params.crud(builder)
- }
- type CRUDParams struct {
- // 除去后缀的服务URL,如http://localhost:8080/example/api/v1
- ServiceVersionedUrl string
- // 领域名称
- DomainCamelName string
- // 可选配置项,通过WithXXX配置
- createOptions *CRUDCreateOptions
- deleteOptions *CRUDDeleteOptions
- updateOptions *CRUDUpdateOptions
- queryOptions *CRUDQueryOptions
- getByIDOptions *CRUDGetByIDOptions
- }
- func (params *CRUDParams) crud(builder *gateway.Builder) {
- createOptions := params.createOptions
- deleteOptions := params.deleteOptions
- updateOptions := params.updateOptions
- queryOptions := params.queryOptions
- getByIDOptions := params.getByIDOptions
- 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) {
- newBody, err := gateway.AddJsonBodyTenantIDAndUserID(c, "tenantId", "createUserId")
- if err != nil {
- return nil, err
- }
- return &gateway.PostRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/create",
- Body: newBody,
- }, nil
- }, createOptions.requestResponseCallback).
- Build(createOptions.middlewares...)
- }
- // 删除
- if !deleteOptions.disable {
- builder.
- Url(http.MethodDelete, domainPath+"/delete").
- Delete(&gateway.DeleteRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/delete",
- }, deleteOptions.requestResponseCallback).
- Build(deleteOptions.middlewares...)
- }
- // 修改
- if !updateOptions.disable {
- builder.
- Url(http.MethodPut, domainPath+"/update").
- Request(func(c *api.Context, historyRequests []gateway.BuilderRequest, resultMap map[string]any) (gateway.BuilderRequest, error) {
- newBody, err := gateway.AddJsonBodyTenantIDAndUserID(c, "", "updateUserId")
- if err != nil {
- return nil, err
- }
- return &gateway.PutRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/update",
- Body: newBody,
- }, nil
- }, updateOptions.requestResponseCallback).
- Build(updateOptions.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) {
- newQueryParams, err := gateway.AddQueryParamsTenantIDAndUserID(c, "tenantId", "")
- if err != nil {
- return nil, err
- }
- return &gateway.GetRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/query",
- QueryParams: newQueryParams,
- }, nil
- }, updateOptions.requestResponseCallback).
- Build(queryOptions.middlewares...)
- }
- // 通过ID获取
- if !getByIDOptions.disable {
- builder.
- Url(http.MethodGet, domainPath+"/get").
- Get(&gateway.GetRequest{
- Url: params.ServiceVersionedUrl + domainPath + "/get",
- }, getByIDOptions.requestResponseCallback).
- Build(getByIDOptions.middlewares...)
- }
- }
- type CRUDCreateOption func(options *CRUDCreateOptions)
- type CRUDDeleteOption func(options *CRUDDeleteOptions)
- type CRUDUpdateOption func(options *CRUDUpdateOptions)
- type CRUDQueryOption func(options *CRUDQueryOptions)
- type CRUDGetByIDOption func(options *CRUDGetByIDOptions)
- type CRUDCreateOptions struct {
- // 关闭创建
- disable bool
- // 创建请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 创建中间件
- middlewares []api.Handler
- }
- type CRUDDeleteOptions struct {
- // 关闭删除
- disable bool
- // 删除请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 删除中间件
- middlewares []api.Handler
- }
- type CRUDUpdateOptions struct {
- // 关闭更新
- disable bool
- // 更新请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 更新中间件
- middlewares []api.Handler
- }
- type CRUDQueryOptions struct {
- // 关闭查询
- disable bool
- // 查询请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 查询中间件
- middlewares []api.Handler
- }
- type CRUDGetByIDOptions struct {
- // 关闭根据ID查询
- disable bool
- // 根据ID请求响应回调
- requestResponseCallback gateway.RequestResponseCallback
- // 根据ID查询中间件
- middlewares []api.Handler
- }
- func WithCRUDCreateCallbacks(callbacks gateway.RequestResponseCallback) CRUDCreateOption {
- return func(options *CRUDCreateOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithCRUDCreateMiddlewares(middlewares []api.Handler) CRUDCreateOption {
- return func(options *CRUDCreateOptions) {
- options.middlewares = middlewares
- }
- }
- func WithCRUDDisableDelete() CRUDDeleteOption {
- return func(options *CRUDDeleteOptions) {
- options.disable = true
- }
- }
- func WithCRUDDeleteCallbacks(callbacks gateway.RequestResponseCallback) CRUDDeleteOption {
- return func(options *CRUDDeleteOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithCRUDDeleteMiddlewares(middlewares []api.Handler) CRUDDeleteOption {
- return func(options *CRUDDeleteOptions) {
- options.middlewares = middlewares
- }
- }
- func WithCRUDDisableUpdate() CRUDUpdateOption {
- return func(options *CRUDUpdateOptions) {
- options.disable = true
- }
- }
- func WithCRUDUpdateCallbacks(callbacks gateway.RequestResponseCallback) CRUDUpdateOption {
- return func(options *CRUDUpdateOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithCRUDUpdateMiddlewares(middlewares []api.Handler) CRUDUpdateOption {
- return func(options *CRUDUpdateOptions) {
- options.middlewares = middlewares
- }
- }
- func WithCRUDDisableQuery() CRUDQueryOption {
- return func(options *CRUDQueryOptions) {
- options.disable = true
- }
- }
- func WithCRUDQueryCallbacks(callbacks gateway.RequestResponseCallback) CRUDQueryOption {
- return func(options *CRUDQueryOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithCRUDQueryMiddlewares(middlewares []api.Handler) CRUDQueryOption {
- return func(options *CRUDQueryOptions) {
- options.middlewares = middlewares
- }
- }
- func WithCRUDDisableGetByID() CRUDGetByIDOption {
- return func(options *CRUDGetByIDOptions) {
- options.disable = true
- }
- }
- func WithCRUDGetByIDCallbacks(callbacks gateway.RequestResponseCallback) CRUDGetByIDOption {
- return func(options *CRUDGetByIDOptions) {
- options.requestResponseCallback = callbacks
- }
- }
- func WithCRUDGetByIDMiddlewares(middlewares []api.Handler) CRUDGetByIDOption {
- return func(options *CRUDGetByIDOptions) {
- options.middlewares = middlewares
- }
- }
|