123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package binding
- import (
- "git.sxidc.com/go-framework/baize/framework/core/api"
- "git.sxidc.com/go-framework/baize/framework/core/api/request"
- "git.sxidc.com/go-framework/baize/framework/core/api/response"
- "git.sxidc.com/go-framework/baize/framework/core/domain"
- "git.sxidc.com/go-framework/baize/framework/core/infrastructure"
- "net/http"
- )
- // PostBind 进行POST绑定,创建POST API并完成接口逻辑编写
- // 类型参数:
- // - O: 响应数据类型,对应response.SendResponseFunc的data的类型
- // 参数:
- // - binder: 用来执行绑定的binder
- // - item: 执行绑定的参数
- // - middlewares: 该绑定的中间件
- func PostBind[O any](binder *Binder, item *SimpleBindItem[O], middlewares ...Middleware) {
- item.bind(binder, http.MethodPost, middlewares...)
- }
- // DeleteBind 进行DELETE绑定,创建DELETE API并完成接口逻辑编写
- // 类型参数:
- // - O: 响应数据类型,对应response.SendResponseFunc的data的类型
- // 参数:
- // - binder: 用来执行绑定的binder
- // - item: 执行绑定的参数
- // - middlewares: 该绑定的中间件
- func DeleteBind[O any](binder *Binder, item *SimpleBindItem[O], middlewares ...Middleware) {
- item.bind(binder, http.MethodDelete, middlewares...)
- }
- // PutBind 进行PUT绑定,创建PUT API并完成接口逻辑编写
- // 类型参数:
- // - O: 响应数据类型,对应response.SendResponseFunc的data的类型
- // 参数:
- // - binder: 用来执行绑定的binder
- // - item: 执行绑定的参数
- // - middlewares: 该绑定的中间件
- // 返回值: 无
- func PutBind[O any](binder *Binder, item *SimpleBindItem[O], middlewares ...Middleware) {
- item.bind(binder, http.MethodPut, middlewares...)
- }
- // GetBind 进行GET绑定,创建GET API并完成接口逻辑编写
- // 类型参数:
- // - O: 响应数据类型,对应response.SendResponseFunc的data的类型
- // 参数:
- // - binder: 用来执行绑定的binder
- // - item: 执行绑定的参数
- // - middlewares: 该绑定的中间件
- // 返回值: 无
- func GetBind[O any](binder *Binder, item *SimpleBindItem[O], middlewares ...Middleware) {
- item.bind(binder, http.MethodGet, middlewares...)
- }
- // FormDomainObjectsFunc 构造领域对象函数类型
- // 参数:
- // - c: 上下文
- // - params: 请求参数
- // 返回值:
- // - 基于请求参数构造的领域对象,回传到ServiceFunc的objects参数
- // - 错误
- type FormDomainObjectsFunc func(c *api.Context, params request.Params) ([]domain.Object, error)
- // ServiceFunc 服务函数(业务逻辑函数)
- // 类型参数:
- // - O: 响应数据类型,对应response.SendResponseFunc的data的类型
- // 参数:
- // - c: 上下文
- // - params: 请求参数
- // - objects: 基于请求参数构造出的领域对象
- // - i: 基础设施
- // 返回值:
- // - 响应数据
- // - 错误
- type ServiceFunc[O any] func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (O, error)
- // SimpleBindItem 简化的BindItem
- type SimpleBindItem[O any] struct {
- // URL相对路径
- Path string
- // 响应泛型函数,如果不响应,需要使用NoResponse零值占位
- SendResponseFunc response.SendResponseFunc[O]
- // 使用的请求参数,非必传,当请求参数为nil时,说明该接口没有参数
- RequestParams request.Params
- // 可选的请求参数绑定函数
- // 非必传,POST和PUT请求默认为JsonBody,DELETE和GET默认为QueryParams
- // 额外还提供了一些转化函数:
- // BindPathParams: 绑定路径参数
- // BindMultipartForm: 绑定multipart form
- // BindFormBody: 绑定form body
- // XMLBody: 绑定XML body
- BindRequestParamsFunc request.BindRequestParamsFunc
- // 通过请求参数构造使用的领域对象,之后在ServiceFunc中会按照构造实体的顺序进行回调
- // 非必传,如果该字段为nil,则说明没有领域对象
- // 与Objects字段二选一使用,如果都指定,会按照该字段处理
- FormDomainObjectsFunc FormDomainObjectsFunc
- // 使用的领域对象,当使用Tag对实体进行标注后,可以直接通过该字段给定实体,之后在ServiceFunc中会按照给定实体的顺序进行回调
- // 非必传,如果为nil或长度为0,则说明没有领域对象
- // 与FormObjectsFunc字段二选一使用,如果都指定,会按照FormObjectsFunc字段处理
- Objects []domain.Object
- // 应用服务泛型函数
- ServiceFunc ServiceFunc[O]
- }
- func (item *SimpleBindItem[O]) bind(binder *Binder, method string, middlewares ...Middleware) {
- bindingItem := &BindItem[O]{
- Method: method,
- SimpleBindItem: item,
- }
- bindingItem.bind(binder, middlewares...)
- }
|