Explorar o código

handle revision 0 (#4092)

d-g-town %!s(int64=2) %!d(string=hai) anos
pai
achega
cfb29b4179

+ 17 - 6
api/server/handlers/porter_app/helm_release.go

@@ -83,12 +83,23 @@ func (c *PorterAppHelmReleaseGetHandler) ServeHTTP(w http.ResponseWriter, r *htt
 			return
 		}
 
-		// TODO (POR-2170): remove this database call once endpoint is deprecated
-		revision, err := c.Repo().AppRevision().AppRevisionByInstanceIDAndRevisionNumber(project.ID, appInstance.Id, version)
-		if err != nil {
-			err := telemetry.Error(ctx, span, err, "error getting app revision by instance id and revision number")
-			c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
-			return
+		// TODO (POR-2170): delete these database calls once endpoint is deprecated
+		var revision *models.AppRevision
+		// treat version 0 as latest like helm
+		if version == 0 {
+			revision, err = c.Repo().AppRevision().LatestNumberedAppRevision(project.ID, appInstance.Id)
+			if err != nil {
+				err := telemetry.Error(ctx, span, err, "error getting latest numbered app revision")
+				c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
+				return
+			}
+		} else {
+			revision, err = c.Repo().AppRevision().AppRevisionByInstanceIDAndRevisionNumber(project.ID, appInstance.Id, version)
+			if err != nil {
+				err := telemetry.Error(ctx, span, err, "error getting app revision by instance id and revision number")
+				c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
+				return
+			}
 		}
 
 		if revision == nil {

+ 2 - 0
internal/repository/app_revision.go

@@ -8,4 +8,6 @@ import (
 type AppRevisionRepository interface {
 	// AppRevisionByInstanceIDAndRevisionNumber finds an app revision by revision number
 	AppRevisionByInstanceIDAndRevisionNumber(projectID uint, appInstanceId string, revisionNumber uint) (*models.AppRevision, error)
+	// LatestNumberedAppRevision finds the latest numbered app revision
+	LatestNumberedAppRevision(projectID uint, appInstanceId string) (*models.AppRevision, error)
 }

+ 11 - 0
internal/repository/gorm/app_revision.go

@@ -27,3 +27,14 @@ func (repo *AppRevisionRepository) AppRevisionByInstanceIDAndRevisionNumber(proj
 
 	return AppRevision, nil
 }
+
+// LatestNumberedAppRevision finds the latest numbered app revision
+func (repo *AppRevisionRepository) LatestNumberedAppRevision(projectID uint, appInstanceId string) (*models.AppRevision, error) {
+	AppRevision := &models.AppRevision{}
+
+	if err := repo.db.Where("project_id = ? AND app_instance_id = ?", projectID, appInstanceId).Order("revision_number DESC").Limit(1).Find(&AppRevision).Error; err != nil {
+		return nil, err
+	}
+
+	return AppRevision, nil
+}

+ 5 - 0
internal/repository/test/app_revision.go

@@ -21,3 +21,8 @@ func NewAppRevisionRepository() repository.AppRevisionRepository {
 func (repo *AppRevisionRepository) AppRevisionByInstanceIDAndRevisionNumber(projectID uint, appInstanceId string, revisionNumber uint) (*models.AppRevision, error) {
 	return nil, errors.New("cannot read database")
 }
+
+// LatestNumberedAppRevision finds the latest numbered app revision
+func (repo *AppRevisionRepository) LatestNumberedAppRevision(projectID uint, appInstanceId string) (*models.AppRevision, error) {
+	return nil, errors.New("cannot read database")
+}