Răsfoiți Sursa

rewrite endpoint to use environment id instead

Alexander Belanger 4 ani în urmă
părinte
comite
660da989ba

+ 22 - 1
api/server/handlers/environment/get_deployment_by_cluster.go → api/server/handlers/environment/get_deployment_by_env.go

@@ -1,14 +1,18 @@
 package environment
 
 import (
+	"errors"
+	"fmt"
 	"net/http"
 
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/shared"
 	"github.com/porter-dev/porter/api/server/shared/apierrors"
 	"github.com/porter-dev/porter/api/server/shared/config"
+	"github.com/porter-dev/porter/api/server/shared/requestutils"
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/internal/models"
+	"gorm.io/gorm"
 )
 
 type GetDeploymentByClusterHandler struct {
@@ -29,13 +33,30 @@ func (c *GetDeploymentByClusterHandler) ServeHTTP(w http.ResponseWriter, r *http
 	project, _ := r.Context().Value(types.ProjectScope).(*models.Project)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
+	envID, reqErr := requestutils.GetURLParamUint(r, "environment_id")
+
+	if reqErr != nil {
+		c.HandleAPIError(w, r, reqErr)
+		return
+	}
+
 	request := &types.GetDeploymentRequest{}
 
 	if ok := c.DecodeAndValidate(w, r, request); !ok {
 		return
 	}
 
-	depl, err := c.Repo().Environment().ReadDeploymentByCluster(project.ID, cluster.ID, request.Namespace)
+	_, err := c.Repo().Environment().ReadEnvironmentByID(project.ID, cluster.ID, envID)
+
+	if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
+		c.HandleAPIError(w, r, apierrors.NewErrForbidden(fmt.Errorf("environment with id %d not found", envID)))
+		return
+	} else if err != nil {
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	depl, err := c.Repo().Environment().ReadDeployment(envID, request.Namespace)
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 2 - 2
api/server/router/cluster.go

@@ -316,14 +316,14 @@ func getClusterRoutes(
 		Router:   r,
 	})
 
-	// GET /api/projects/{project_id}/clusters/{cluster_id}/deployment -> environment.NewGetDeploymentByClusterHandler
+	// GET /api/projects/{project_id}/clusters/{cluster_id}/{environment_id}/deployment -> environment.NewGetDeploymentByClusterHandler
 	getDeploymentEndpoint := factory.NewAPIEndpoint(
 		&types.APIRequestMetadata{
 			Verb:   types.APIVerbGet,
 			Method: types.HTTPVerbGet,
 			Path: &types.Path{
 				Parent:       basePath,
-				RelativePath: relPath + "/deployment",
+				RelativePath: relPath + "/{environment_id}/deployment",
 			},
 			Scopes: []types.PermissionScope{
 				types.UserScope,

+ 2 - 0
dashboard/src/main/home/cluster-dashboard/dashboard/preview-environments/EnvironmentDetail.tsx

@@ -30,6 +30,7 @@ const EnvironmentDetail = () => {
 
   useEffect(() => {
     let isSubscribed = true;
+    let environment_id = parseInt(searchParams.get("environment_id"));
 
     api
       .getPRDeploymentByCluster(
@@ -40,6 +41,7 @@ const EnvironmentDetail = () => {
         {
           project_id: currentProject.id,
           cluster_id: currentCluster.id,
+          environment_id: environment_id,
         }
       )
       .then(({ data }) => {

+ 3 - 2
dashboard/src/shared/api.tsx

@@ -357,11 +357,12 @@ const getPRDeploymentByCluster = baseApi<
   {
     cluster_id: number;
     project_id: number;
+    environment_id: number;
   }
 >("GET", (pathParams) => {
-  const { cluster_id, project_id } = pathParams;
+  const { cluster_id, project_id, environment_id } = pathParams;
 
-  return `/api/projects/${project_id}/clusters/${cluster_id}/deployment`;
+  return `/api/projects/${project_id}/clusters/${cluster_id}/${environment_id}/deployment`;
 });
 
 const getPRDeployment = baseApi<

+ 1 - 0
internal/repository/environment.go

@@ -5,6 +5,7 @@ import "github.com/porter-dev/porter/internal/models"
 type EnvironmentRepository interface {
 	CreateEnvironment(env *models.Environment) (*models.Environment, error)
 	ReadEnvironment(projectID, clusterID, gitInstallationID uint, gitRepoOwner, gitRepoName string) (*models.Environment, error)
+	ReadEnvironmentByID(projectID, clusterID, envID uint) (*models.Environment, error)
 	ListEnvironments(projectID, clusterID uint) ([]*models.Environment, error)
 	DeleteEnvironment(env *models.Environment) (*models.Environment, error)
 	CreateDeployment(deployment *models.Deployment) (*models.Deployment, error)

+ 13 - 0
internal/repository/gorm/environment.go

@@ -36,6 +36,19 @@ func (repo *EnvironmentRepository) ReadEnvironment(projectID, clusterID, gitInst
 	return env, nil
 }
 
+func (repo *EnvironmentRepository) ReadEnvironmentByID(projectID, clusterID, envID uint) (*models.Environment, error) {
+	env := &models.Environment{}
+
+	if err := repo.db.Order("id desc").Where(
+		"project_id = ? AND cluster_id = ? AND id = ?",
+		projectID, clusterID, envID,
+	).First(&env).Error; err != nil {
+		return nil, err
+	}
+
+	return env, nil
+}
+
 func (repo *EnvironmentRepository) ListEnvironments(projectID, clusterID uint) ([]*models.Environment, error) {
 	envs := make([]*models.Environment, 0)
 

+ 4 - 0
internal/repository/test/environment.go

@@ -23,6 +23,10 @@ func (repo *EnvironmentRepository) ReadEnvironment(projectID, clusterID, gitInst
 	panic("unimplemented")
 }
 
+func (repo *EnvironmentRepository) ReadEnvironmentByID(projectID, clusterID, envID uint) (*models.Environment, error) {
+	panic("unimplemented")
+}
+
 func (repo *EnvironmentRepository) ListEnvironments(projectID, clusterID uint) ([]*models.Environment, error) {
 	panic("unimplemented")
 }