mirror of
https://github.com/kubevela/kubevela.git
synced 2026-03-05 19:22:03 +00:00
* Feat: Refactoring the API Server module for better layering Signed-off-by: barnettZQG <barnett.zqg@gmail.com> * Fix: code style Signed-off-by: barnettZQG <barnett.zqg@gmail.com> * Fix: code style Signed-off-by: barnettZQG <barnett.zqg@gmail.com> * Fix: fix the lint errors Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
1249 lines
51 KiB
Go
1249 lines
51 KiB
Go
/*
|
|
Copyright 2021 The KubeVela Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://wwc.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package api
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/utils"
|
|
|
|
restfulspec "github.com/emicklei/go-restful-openapi/v2"
|
|
"github.com/emicklei/go-restful/v3"
|
|
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/domain/model"
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/domain/service"
|
|
apis "github.com/oam-dev/kubevela/pkg/apiserver/interfaces/api/dto/v1"
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/utils/bcode"
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/utils/log"
|
|
)
|
|
|
|
type applicationAPIInterface struct {
|
|
WorkflowAPI WorkflowAPIInterface `inject:"inline"`
|
|
RbacService service.RBACService `inject:""`
|
|
ApplicationService service.ApplicationService `inject:""`
|
|
EnvBindingService service.EnvBindingService `inject:""`
|
|
}
|
|
|
|
// NewApplicationAPIInterface new application manage APIInterface
|
|
func NewApplicationAPIInterface() Interface {
|
|
return &applicationAPIInterface{}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) GetWebServiceRoute() *restful.WebService {
|
|
ws := new(restful.WebService)
|
|
ws.Path(versionPrefix+"/applications").
|
|
Consumes(restful.MIME_XML, restful.MIME_JSON).
|
|
Produces(restful.MIME_JSON, restful.MIME_XML).
|
|
Doc("api for application manage")
|
|
|
|
tags := []string{"application"}
|
|
|
|
ws.Route(ws.GET("/").To(c.listApplications).
|
|
Doc("list all applications").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Param(ws.QueryParameter("query", "Fuzzy search based on name or description").DataType("string")).
|
|
Param(ws.QueryParameter("project", "search base on project name").DataType("string")).
|
|
Param(ws.QueryParameter("env", "search base on env name").DataType("string")).
|
|
Param(ws.QueryParameter("targetName", "Name of the application delivery target").DataType("string")).
|
|
// This api will filter the app by user's permissions
|
|
// Filter(c.RbacService.CheckPerm("application", "list")).
|
|
Returns(200, "OK", apis.ListApplicationResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ListApplicationResponse{}))
|
|
|
|
ws.Route(ws.POST("/").To(c.createApplication).
|
|
Doc("create one application ").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.CreateApplicationRequest{}).
|
|
Filter(c.RbacService.CheckPerm("application", "create")).
|
|
Returns(200, "OK", apis.ApplicationBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationBase{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}").To(c.deleteApplication).
|
|
Doc("delete one application").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}").To(c.detailApplication).
|
|
Doc("detail one application ").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.DetailApplicationResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailApplicationResponse{}))
|
|
|
|
ws.Route(ws.PUT("/{appName}").To(c.updateApplication).
|
|
Doc("update one application ").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Reads(apis.UpdateApplicationRequest{}).
|
|
Returns(200, "OK", apis.ApplicationBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationBase{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/statistics").To(c.applicationStatistics).
|
|
Doc("detail one application ").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.ApplicationStatisticsResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationStatisticsResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/triggers").To(c.createApplicationTrigger).
|
|
Doc("create one application trigger").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("trigger", "create")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Reads(apis.CreateApplicationTriggerRequest{}).
|
|
Returns(200, "OK", apis.ApplicationTriggerBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationTriggerBase{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/triggers/{token}").To(c.deleteApplicationTrigger).
|
|
Doc("delete one application trigger").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("trigger", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.PathParameter("token", "identifier of the trigger").DataType("string")).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes([]*apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/triggers").To(c.listApplicationTriggers).
|
|
Doc("list application triggers").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("trigger", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.ListApplicationTriggerResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes([]*apis.ApplicationTriggerBase{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/template").To(c.publishApplicationTemplate).
|
|
Doc("create one application template").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("applicationTemplate", "create")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Reads(apis.CreateApplicationTemplateRequest{}).
|
|
Returns(200, "OK", apis.ApplicationTemplateBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationTemplateBase{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/deploy").To(c.deployApplication).
|
|
Doc("deploy or upgrade the application").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "deploy")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Reads(apis.ApplicationDeployRequest{}).
|
|
Returns(200, "OK", apis.ApplicationDeployResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationDeployResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/components").To(c.listApplicationComponents).
|
|
Doc("gets the list of application components").
|
|
Filter(c.RbacService.CheckPerm("component", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.QueryParameter("envName", "list components that deployed in define env").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ComponentListResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ComponentListResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/components").To(c.createComponent).
|
|
Doc("create component for application ").
|
|
Filter(c.RbacService.CheckPerm("component", "create")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.CreateComponentRequest{}).
|
|
Returns(200, "OK", apis.ComponentBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ComponentBase{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/components/{compName}").To(c.detailComponent).
|
|
Doc("detail component for application ").
|
|
Filter(c.RbacService.CheckPerm("component", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.DetailComponentResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailComponentResponse{}))
|
|
|
|
ws.Route(ws.PUT("/{appName}/components/{compName}").To(c.updateComponent).
|
|
Doc("update component config").
|
|
Filter(c.RbacService.CheckPerm("component", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.UpdateApplicationComponentRequest{}).
|
|
Returns(200, "OK", apis.ComponentBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ComponentBase{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/components/{compName}").To(c.deleteComponent).
|
|
Doc("delete a component").
|
|
Filter(c.RbacService.CheckPerm("component", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Returns(404, "Not Found", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/policies").To(c.listApplicationPolicies).
|
|
Doc("list policy for application").
|
|
Filter(c.RbacService.CheckPerm("policy", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ListApplicationPolicy{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ListApplicationPolicy{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/policies").To(c.createApplicationPolicy).
|
|
Doc("create policy for application").
|
|
Filter(c.RbacService.CheckPerm("policy", "create")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.CreatePolicyRequest{}).
|
|
Returns(200, "OK", apis.PolicyBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.PolicyBase{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/policies/{policyName}").To(c.detailApplicationPolicy).
|
|
Doc("detail policy for application").
|
|
Filter(c.RbacService.CheckPerm("policy", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("policyName", "identifier of the application policy").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.DetailPolicyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailPolicyResponse{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/policies/{policyName}").To(c.deleteApplicationPolicy).
|
|
Doc("detail policy for application").
|
|
Filter(c.RbacService.CheckPerm("policy", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("policyName", "identifier of the application policy").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.PUT("/{appName}/policies/{policyName}").To(c.updateApplicationPolicy).
|
|
Doc("update policy for application").
|
|
Filter(c.RbacService.CheckPerm("policy", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("policyName", "identifier of the application policy").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.UpdatePolicyRequest{}).
|
|
Returns(200, "OK", apis.DetailPolicyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailPolicyResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/components/{compName}/traits").To(c.addApplicationTrait).
|
|
Doc("add trait for a component").
|
|
Filter(c.RbacService.CheckPerm("trait", "create")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.CreateApplicationTraitRequest{}).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationTrait{}))
|
|
|
|
ws.Route(ws.PUT("/{appName}/components/{compName}/traits/{traitType}").To(c.updateApplicationTrait).
|
|
Doc("update trait from a component").
|
|
Filter(c.RbacService.CheckPerm("trait", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Param(ws.PathParameter("traitType", "identifier of the type of trait").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.UpdateApplicationTraitRequest{}).
|
|
Returns(200, "OK", apis.ApplicationTrait{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationTrait{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/components/{compName}/traits/{traitType}").To(c.deleteApplicationTrait).
|
|
Doc("delete trait from a component").
|
|
Filter(c.RbacService.CheckPerm("trait", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.componentCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("compName", "identifier of the component").DataType("string")).
|
|
Param(ws.PathParameter("traitType", "identifier of the type of trait").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ApplicationTrait{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/revisions").To(c.listApplicationRevisions).
|
|
Doc("list revisions for application").
|
|
Filter(c.RbacService.CheckPerm("revision", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.QueryParameter("envName", "query identifier of the env").DataType("string")).
|
|
Param(ws.QueryParameter("status", "query identifier of the status").DataType("string")).
|
|
Param(ws.QueryParameter("page", "query the page number").DataType("integer")).
|
|
Param(ws.QueryParameter("pageSize", "query the page size number").DataType("integer")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ListRevisionsResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ListRevisionsResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/revisions/{revision}").To(c.detailApplicationRevision).
|
|
Doc("detail revision for application").
|
|
Filter(c.RbacService.CheckPerm("revision", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application").DataType("string")).
|
|
Param(ws.PathParameter("revision", "identifier of the application revision").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.DetailRevisionResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailRevisionResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/envs").To(c.listApplicationEnvs).
|
|
Doc("list policy for application").
|
|
Filter(c.RbacService.CheckPerm("envBinding", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ListApplicationEnvBinding{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ListApplicationEnvBinding{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/envs").To(c.createApplicationEnv).
|
|
Doc("creating an application environment ").
|
|
Filter(c.RbacService.CheckPerm("envBinding", "create")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Reads(apis.CreateApplicationEnvbindingRequest{}).
|
|
Returns(200, "OK", apis.EnvBinding{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.PUT("/{appName}/envs/{envName}").To(c.updateApplicationEnv).
|
|
Doc("set application differences in the specified environment").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("envBinding", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.envCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.PathParameter("envName", "identifier of the envBinding ").DataType("string")).
|
|
Reads(apis.PutApplicationEnvBindingRequest{}).
|
|
Returns(200, "OK", apis.EnvBinding{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EnvBinding{}))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/envs/{envName}").To(c.deleteApplicationEnv).
|
|
Doc("delete an application environment ").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("envBinding", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.envCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.PathParameter("envName", "identifier of the envBinding ").DataType("string")).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(404, "Not Found", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/envs/{envName}/status").To(c.getApplicationStatus).
|
|
Doc("get application status").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("envBinding", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.envCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Param(ws.PathParameter("envName", "identifier of the application envbinding").DataType("string")).
|
|
Returns(200, "OK", apis.ApplicationStatusResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ApplicationStatusResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/envs/{envName}/recycle").To(c.recycleApplicationEnv).
|
|
Doc("get application status").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("envBinding", "recycle")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.envCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("envName", "identifier of the application envbinding").DataType("string").Required(true)).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.EmptyResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows").To(c.WorkflowAPI.listApplicationWorkflows).
|
|
Doc("list application workflow").
|
|
Filter(c.RbacService.CheckPerm("application/workflow", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Returns(200, "OK", apis.ListWorkflowResponse{}).
|
|
Writes(apis.ListWorkflowResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.POST("/{appName}/workflows").To(c.WorkflowAPI.createOrUpdateApplicationWorkflow).
|
|
Doc("create application workflow").
|
|
Filter(c.RbacService.CheckPerm("application/workflow", "create")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Reads(apis.CreateWorkflowRequest{}).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Returns(200, "create success", apis.DetailWorkflowResponse{}).
|
|
Returns(400, "create failure", bcode.Bcode{}).
|
|
Writes(apis.DetailWorkflowResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}").To(c.WorkflowAPI.detailWorkflow).
|
|
Doc("detail application workflow").
|
|
Filter(c.RbacService.CheckPerm("application/workflow", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workfloc.").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Returns(200, "create success", apis.DetailWorkflowResponse{}).
|
|
Writes(apis.DetailWorkflowResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.PUT("/{appName}/workflows/{workflowName}").To(c.WorkflowAPI.updateWorkflow).
|
|
Doc("update application workflow config").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application/workflow", "update")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Reads(apis.UpdateWorkflowRequest{}).
|
|
Returns(200, "OK", apis.DetailWorkflowResponse{}).
|
|
Writes(apis.DetailWorkflowResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.DELETE("/{appName}/workflows/{workflowName}").To(c.WorkflowAPI.deleteWorkflow).
|
|
Doc("deletet workflow").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application/workflow", "delete")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Returns(200, "OK", apis.EmptyResponse{}).
|
|
Writes(apis.EmptyResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}/records").To(c.WorkflowAPI.listWorkflowRecords).
|
|
Doc("query application workflow execution record").
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "list")).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Param(ws.QueryParameter("page", "query the page number").DataType("integer")).
|
|
Param(ws.QueryParameter("pageSize", "query the page size number").DataType("integer")).
|
|
Returns(200, "OK", apis.ListWorkflowRecordsResponse{}).
|
|
Writes(apis.ListWorkflowRecordsResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}/records/{record}").To(c.WorkflowAPI.detailWorkflowRecord).
|
|
Doc("query application workflow execution record detail").
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "detail")).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Param(ws.PathParameter("record", "identifier of the workflow record").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Returns(200, "OK", apis.DetailWorkflowRecordResponse{}).
|
|
Writes(apis.DetailWorkflowRecordResponse{}).Do(returns200, returns500))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}/records/{record}/resume").To(c.WorkflowAPI.resumeWorkflowRecord).
|
|
Doc("resume suspend workflow record").
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "resume")).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Param(ws.PathParameter("record", "identifier of the workflow record").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Returns(200, "OK", nil).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailWorkflowRecordResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}/records/{record}/terminate").To(c.WorkflowAPI.terminateWorkflowRecord).
|
|
Doc("terminate suspend workflow record").
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "terminate")).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Param(ws.PathParameter("record", "identifier of the workflow record").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Returns(200, "OK", nil).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailWorkflowRecordResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/workflows/{workflowName}/records/{record}/rollback").To(c.WorkflowAPI.rollbackWorkflowRecord).
|
|
Doc("rollback suspend application record").
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "rollback")).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Param(ws.PathParameter("workflowName", "identifier of the workflow").DataType("string")).
|
|
Param(ws.PathParameter("record", "identifier of the workflow record").DataType("string")).
|
|
Param(ws.QueryParameter("rollbackVersion", "identifier of the rollback revision").DataType("string")).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Filter(c.WorkflowAPI.workflowCheckFilter).
|
|
Returns(200, "OK", nil).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.DetailWorkflowRecordResponse{}))
|
|
|
|
ws.Route(ws.GET("/{appName}/records").To(c.listApplicationRecords).
|
|
Doc("list application records").
|
|
Filter(c.RbacService.CheckPerm("application/workflow/record", "list")).
|
|
Param(ws.PathParameter("appName", "identifier of the application.").DataType("string").Required(true)).
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.appCheckFilter).
|
|
Returns(200, "OK", nil).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.ListWorkflowRecordsResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/compare").To(c.compareAppWithLatestRevision).
|
|
Doc("compare application with env latest revision").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "compare")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.ApplicationBase{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.AppCompareResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/reset").To(c.resetAppToLatestRevision).
|
|
Doc("reset application to latest revision").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "reset")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.AppResetResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.AppResetResponse{}))
|
|
|
|
ws.Route(ws.POST("/{appName}/dry-run").To(c.dryRunAppOrRevision).
|
|
Doc("dry-run application to latest revision").
|
|
Metadata(restfulspec.KeyOpenAPITags, tags).
|
|
Filter(c.RbacService.CheckPerm("application", "detail")).
|
|
Filter(c.appCheckFilter).
|
|
Param(ws.PathParameter("appName", "identifier of the application ").DataType("string")).
|
|
Returns(200, "OK", apis.AppDryRunResponse{}).
|
|
Returns(400, "Bad Request", bcode.Bcode{}).
|
|
Writes(apis.AppDryRunResponse{}))
|
|
|
|
ws.Filter(authCheckFilter)
|
|
return ws
|
|
}
|
|
|
|
func (c *applicationAPIInterface) createApplication(req *restful.Request, res *restful.Response) {
|
|
// Verify the validity of parameters
|
|
var createReq apis.CreateApplicationRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
// Call the domain layer code
|
|
appBase, err := c.ApplicationService.CreateApplication(req.Request.Context(), createReq)
|
|
if err != nil {
|
|
log.Logger.Errorf("create application failure %s", err.Error())
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
|
|
// Write back response data
|
|
if err := res.WriteEntity(appBase); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplications(req *restful.Request, res *restful.Response) {
|
|
var projetNames []string
|
|
if req.QueryParameter("project") != "" {
|
|
projetNames = append(projetNames, req.QueryParameter("project"))
|
|
}
|
|
apps, err := c.ApplicationService.ListApplications(req.Request.Context(), apis.ListApplicationOptions{
|
|
Projects: projetNames,
|
|
Env: req.QueryParameter("env"),
|
|
TargetName: req.QueryParameter("targetName"),
|
|
Query: req.QueryParameter("query"),
|
|
})
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.ListApplicationResponse{Applications: apps}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) detailApplication(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
detail, err := c.ApplicationService.DetailApplication(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(detail); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) createApplicationTrigger(req *restful.Request, res *restful.Response) {
|
|
var createReq apis.CreateApplicationTriggerRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
base, err := c.ApplicationService.CreateApplicationTrigger(req.Request.Context(), app, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationTriggers(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
triggers, err := c.ApplicationService.ListApplicationTriggers(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.ListApplicationTriggerResponse{Triggers: triggers}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteApplicationTrigger(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
if err := c.ApplicationService.DeleteApplicationTrigger(req.Request.Context(), app, req.PathParameter("token")); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) publishApplicationTemplate(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
base, err := c.ApplicationService.PublishApplicationTemplate(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// deployApplication TODO: return event model
|
|
func (c *applicationAPIInterface) deployApplication(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var createReq apis.ApplicationDeployRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
deployRes, err := c.ApplicationService.Deploy(req.Request.Context(), app, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(deployRes); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteApplication(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
err := c.ApplicationService.DeleteApplication(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationComponents(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
components, err := c.ApplicationService.ListComponents(req.Request.Context(), app, apis.ListApplicationComponentOptions{
|
|
EnvName: req.QueryParameter("envName"),
|
|
})
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.ComponentListResponse{Components: components}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) createComponent(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var createReq apis.CreateComponentRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
base, err := c.ApplicationService.CreateComponent(req.Request.Context(), app, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) detailComponent(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
detail, err := c.ApplicationService.DetailComponent(req.Request.Context(), app, req.PathParameter("compName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(detail); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) updateComponent(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
component := req.Request.Context().Value(&apis.CtxKeyApplicationComponent).(*model.ApplicationComponent)
|
|
// Verify the validity of parameters
|
|
var updateReq apis.UpdateApplicationComponentRequest
|
|
if err := req.ReadEntity(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
base, err := c.ApplicationService.UpdateComponent(req.Request.Context(), app, component, updateReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteComponent(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
component := req.Request.Context().Value(&apis.CtxKeyApplicationComponent).(*model.ApplicationComponent)
|
|
err := c.ApplicationService.DeleteComponent(req.Request.Context(), app, component)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) createApplicationPolicy(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var createReq apis.CreatePolicyRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
base, err := c.ApplicationService.CreatePolicy(req.Request.Context(), app, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationPolicies(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
policies, err := c.ApplicationService.ListPolicies(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.ListApplicationPolicy{Policies: policies}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) detailApplicationPolicy(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
detail, err := c.ApplicationService.DetailPolicy(req.Request.Context(), app, req.PathParameter("policyName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(detail); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteApplicationPolicy(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
err := c.ApplicationService.DeletePolicy(req.Request.Context(), app, req.PathParameter("policyName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) updateApplicationPolicy(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var updateReq apis.UpdatePolicyRequest
|
|
if err := req.ReadEntity(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
response, err := c.ApplicationService.UpdatePolicy(req.Request.Context(), app, req.PathParameter("policyName"), updateReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(response); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) updateApplication(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var updateReq apis.UpdateApplicationRequest
|
|
if err := req.ReadEntity(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
base, err := c.ApplicationService.UpdateApplication(req.Request.Context(), app, updateReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) addApplicationTrait(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
var createReq apis.CreateApplicationTraitRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
trait, err := c.ApplicationService.CreateApplicationTrait(req.Request.Context(), app,
|
|
&model.ApplicationComponent{Name: req.PathParameter("compName")}, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(trait); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) updateApplicationTrait(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
var updateReq apis.UpdateApplicationTraitRequest
|
|
if err := req.ReadEntity(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
trait, err := c.ApplicationService.UpdateApplicationTrait(req.Request.Context(), app,
|
|
&model.ApplicationComponent{Name: req.PathParameter("compName")}, req.PathParameter("traitType"), updateReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(trait); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteApplicationTrait(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
err := c.ApplicationService.DeleteApplicationTrait(req.Request.Context(), app,
|
|
&model.ApplicationComponent{Name: req.PathParameter("compName")}, req.PathParameter("traitType"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) getApplicationStatus(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
status, err := c.ApplicationService.GetApplicationStatus(req.Request.Context(), app, req.PathParameter("envName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
|
|
if err := res.WriteEntity(apis.ApplicationStatusResponse{Status: status, EnvName: req.PathParameter("envName")}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationRevisions(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
page, pageSize, err := utils.ExtractPagingParams(req, minPageSize, maxPageSize)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
revisions, err := c.ApplicationService.ListRevisions(req.Request.Context(), app.Name, req.QueryParameter("envName"), req.QueryParameter("status"), page, pageSize)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(revisions); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) detailApplicationRevision(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
detail, err := c.ApplicationService.DetailRevision(req.Request.Context(), app.Name, req.PathParameter("revision"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(detail); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) updateApplicationEnv(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var updateReq apis.PutApplicationEnvBindingRequest
|
|
if err := req.ReadEntity(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&updateReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
diff, err := c.EnvBindingService.UpdateEnvBinding(req.Request.Context(), app, req.PathParameter("envName"), updateReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(diff); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationEnvs(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
envBindings, err := c.EnvBindingService.GetEnvBindings(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.ListApplicationEnvBinding{EnvBindings: envBindings}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) createApplicationEnv(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var createReq apis.CreateApplicationEnvbindingRequest
|
|
if err := req.ReadEntity(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&createReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
base, err := c.EnvBindingService.CreateEnvBinding(req.Request.Context(), app, createReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) deleteApplicationEnv(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
err := c.EnvBindingService.DeleteEnvBinding(req.Request.Context(), app, req.PathParameter("envName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) appCheckFilter(req *restful.Request, res *restful.Response, chain *restful.FilterChain) {
|
|
app, err := c.ApplicationService.GetApplication(req.Request.Context(), req.PathParameter("appName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
req.Request = req.Request.WithContext(context.WithValue(req.Request.Context(), &apis.CtxKeyApplication, app))
|
|
chain.ProcessFilter(req, res)
|
|
}
|
|
|
|
func (c *applicationAPIInterface) componentCheckFilter(req *restful.Request, res *restful.Response, chain *restful.FilterChain) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
component, err := c.ApplicationService.GetApplicationComponent(req.Request.Context(), app, req.PathParameter("compName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
req.Request = req.Request.WithContext(context.WithValue(req.Request.Context(), &apis.CtxKeyApplicationComponent, component))
|
|
chain.ProcessFilter(req, res)
|
|
}
|
|
|
|
func (c *applicationAPIInterface) envCheckFilter(req *restful.Request, res *restful.Response, chain *restful.FilterChain) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
envBinding, err := c.EnvBindingService.GetEnvBinding(req.Request.Context(), app, req.PathParameter("envName"))
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
req.Request = req.Request.WithContext(context.WithValue(req.Request.Context(), &apis.CtxKeyApplicationEnvBinding, envBinding))
|
|
chain.ProcessFilter(req, res)
|
|
}
|
|
|
|
func (c *applicationAPIInterface) applicationStatistics(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
detail, err := c.ApplicationService.Statistics(req.Request.Context(), app)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(detail); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) recycleApplicationEnv(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
env := req.Request.Context().Value(&apis.CtxKeyApplicationEnvBinding).(*model.EnvBinding)
|
|
err := c.EnvBindingService.ApplicationEnvRecycle(req.Request.Context(), app, env)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(apis.EmptyResponse{}); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) listApplicationRecords(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
records, err := c.ApplicationService.ListRecords(req.Request.Context(), app.Name)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(records); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) compareAppWithLatestRevision(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var compareReq apis.AppCompareReq
|
|
if err := req.ReadEntity(&compareReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&compareReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
|
|
base, err := c.ApplicationService.CompareAppWithLatestRevision(req.Request.Context(), app, compareReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) resetAppToLatestRevision(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
|
|
base, err := c.ApplicationService.ResetAppToLatestRevision(req.Request.Context(), app.Name)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (c *applicationAPIInterface) dryRunAppOrRevision(req *restful.Request, res *restful.Response) {
|
|
app := req.Request.Context().Value(&apis.CtxKeyApplication).(*model.Application)
|
|
// Verify the validity of parameters
|
|
var dryRunReq apis.AppDryRunReq
|
|
if err := req.ReadEntity(&dryRunReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := validate.Struct(&dryRunReq); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if dryRunReq.AppName == "" {
|
|
dryRunReq.AppName = app.Name
|
|
}
|
|
|
|
base, err := c.ApplicationService.DryRunAppOrRevision(req.Request.Context(), app, dryRunReq)
|
|
if err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
if err := res.WriteEntity(base); err != nil {
|
|
bcode.ReturnError(req, res, err)
|
|
return
|
|
}
|
|
}
|