Files
kubevela/pkg/apiserver/interfaces/api/application.go
barnettZQG 09ce919b2b Feat: Refactoring the API Server module for better layering (#3945)
* 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>
2022-05-23 12:17:28 +08:00

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
}
}