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/secret" ) func init() { ioc.Api().Registry(&SecretApiHandler{}) } type SecretApiHandler struct { ioc.ObjectImpl } func (r *SecretApiHandler) Name() string { return secret.AppName } func (r *SecretApiHandler) Init() error { // WebService ws // api/v1/resource ws := gorestful.ObjectRouter(r) tags := []string{"凭证管理"} ws.Route(ws.GET("").To(r.QuerySecret).Doc("凭证列表"). Param(ws.QueryParameter("page_size", "分页大小").DataType("intger")). Param(ws.QueryParameter("page_number", "页码").DataType("intger")). Param(ws.QueryParameter("keywords", "关键字过滤").DataType("string")). Metadata(restfulspec.KeyOpenAPITags, tags). Writes(SecretSet{}). Returns(200, "OK", SecretSet{}). Returns(404, "Not Found", exception.NewNotFound(""))) // :id -> {id} ws.Route(ws.GET("/{id}").To(r.DescribeSecret).Doc("凭证详情"). Param(ws.PathParameter("id", "凭证Id").DataType("string")). Metadata(restfulspec.KeyOpenAPITags, tags). Writes(secret.Secret{}). Returns(200, "OK", secret.Secret{}). Returns(404, "Not Found", exception.NewNotFound(""))) return nil } type SecretSet struct { Total int64 `json:"total"` Items []*secret.Secret `json:"items"` } func (r *SecretApiHandler) QuerySecret(req *restful.Request, resp *restful.Response) { sr := secret.NewQuerySecretRequest() // 获取参数, bind err := binding.Query.Bind(req.Request, sr) if err != nil { response.Failed(resp, exception.NewBadRequest(err.Error())) return } // 业务逻辑 set, err := secret.GetService().QuerySecret(req.Request.Context(), sr) if err != nil { response.Failed(resp, err) return } response.Success(resp, set) } func (r *SecretApiHandler) DescribeSecret(req *restful.Request, resp *restful.Response) { sr := secret.NewDescribeSecretRequeset(req.PathParameter("id")) // 业务逻辑 ins, err := secret.GetService().DescribeSecret(req.Request.Context(), sr) if err != nil { response.Failed(resp, err) return } response.Success(resp, ins) }