package api import ( restfulspec "github.com/emicklei/go-restful-openapi/v2" "github.com/emicklei/go-restful/v3" "github.com/gin-gonic/gin/binding" "github.com/infraboard/mcube/v2/exception" "github.com/infraboard/mcube/v2/http/restful/response" "github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc/config/gorestful" "gitlab.com/go-course-project/go17/devcloud-mini/cmdb/apps/resource" ) func init() { ioc.Api().Registry(&ResourceApiHandler{}) } type ResourceApiHandler struct { ioc.ObjectImpl // @Resource(name="", namespace="") // @Resource // ResourceService resource.Service `ioc:"autowire=true;namespace=controllers"` } func (r *ResourceApiHandler) Name() string { return resource.AppName } func (r *ResourceApiHandler) Init() error { // WebService ws // api/v1/resource ws := gorestful.ObjectRouter(r) // 半自动 // r.ResourceService = resource.GetService() tags := []string{"资源管理"} ws.Route(ws.GET("").To(r.Search).Doc("资源检索"). Param(ws.PathParameter("page_size", "分页大小").DataType("intger")). Param(ws.PathParameter("page_number", "页码").DataType("intger")). Param(ws.PathParameter("keywords", "关键字过滤").DataType("string")). Metadata(restfulspec.KeyOpenAPITags, tags). Writes(resource.ResourceSet{}). Returns(200, "OK", resource.ResourceSet{}). Returns(404, "Not Found", exception.ApiException{})) return nil } func (r *ResourceApiHandler) Search(req *restful.Request, resp *restful.Response) { sr := resource.NewSearchRequest() // 获取参数, bind err := binding.Query.Bind(req.Request, sr) if err != nil { response.Failed(resp, exception.NewBadRequest(err.Error())) return } // 业务逻辑 set, err := resource.GetService().Search(req.Request.Context(), sr) if err != nil { response.Failed(resp, err) return } response.Success(resp, set) }