@@ -111,15 +111,16 @@ func (App) CreateBundle(ctx *gin.Context) {
111111 // uuid, _ := uuid.NewUUID()
112112 // hash := uuid.String()
113113 newPackage := model.Package {
114- DeploymentId : deployment .Id ,
115- Size : createBundleReq .Size ,
116- Hash : createBundleReq .Hash ,
117- Download : createBundleReq .DownloadUrl ,
118- Description : createBundleReq .Description ,
119- Active : utils .CreateInt (0 ),
120- Installed : utils .CreateInt (0 ),
121- Failed : utils .CreateInt (0 ),
122- CreateTime : utils .GetTimeNow (),
114+ DeploymentId : deployment .Id ,
115+ DeploymentVersionId : deploymentVersion .Id ,
116+ Size : createBundleReq .Size ,
117+ Hash : createBundleReq .Hash ,
118+ Download : createBundleReq .DownloadUrl ,
119+ Description : createBundleReq .Description ,
120+ Active : utils .CreateInt (0 ),
121+ Installed : utils .CreateInt (0 ),
122+ Failed : utils .CreateInt (0 ),
123+ CreateTime : utils .GetTimeNow (),
123124 }
124125 model.Create [model.Package ](& newPackage )
125126 deploymentVersion .CurrentPackage = newPackage .Id
@@ -423,3 +424,69 @@ func (App) DelDeployment(ctx *gin.Context) {
423424 log .Panic (err .Error ())
424425 }
425426}
427+
428+ type rollbackReq struct {
429+ AppName * string `json:"appName" binding:"required"`
430+ Deployment * string `json:"deployment" binding:"required"`
431+ Version * string `json:"version"`
432+ }
433+
434+ func (App ) Rollback (ctx * gin.Context ) {
435+ rollbackReq := rollbackReq {}
436+ if err := ctx .ShouldBindBodyWith (& rollbackReq , binding .JSON ); err == nil {
437+ uid := ctx .MustGet (constants .GIN_USER_ID ).(int )
438+
439+ app := model.App {}.GetAppByUidAndAppName (uid , * rollbackReq .AppName )
440+ if app == nil {
441+ log .Panic ("App not found" )
442+ }
443+ deployment := model.Deployment {}.GetByAppidAndName (* app .Id , * rollbackReq .Deployment )
444+ if deployment == nil {
445+ log .Panic ("Deployment " + * rollbackReq .Deployment + " not found" )
446+ }
447+
448+ var deploymentVersion * model.DeploymentVersion
449+ if deployment .VersionId != nil {
450+ deploymentVersion = model.DeploymentVersion {}.GetByKeyDeploymentIdAndVersion (* deployment .Id , * rollbackReq .Version )
451+ }
452+ if deploymentVersion == nil {
453+ log .Panic ("Version not found" )
454+ }
455+ if deploymentVersion .CurrentPackage == nil {
456+ log .Panic ("There is no upload package for the current version" )
457+ }
458+ newPackage := model.Package {}.GetRollbackPack (* deployment .Id , * deploymentVersion .CurrentPackage , * deploymentVersion .Id )
459+
460+ userDb , _ := db .GetUserDB ()
461+ err := userDb .Transaction (func (tx * gorm.DB ) error {
462+ if newPackage == nil {
463+ model.DeploymentVersion {}.UpdateCurrentPackage (* deploymentVersion .Id , nil )
464+ } else {
465+ model.DeploymentVersion {}.UpdateCurrentPackage (* deploymentVersion .Id , newPackage .Id )
466+ }
467+ return nil
468+ })
469+ if err != nil {
470+ panic ("RollbackError:" + err .Error ())
471+ }
472+
473+ if newPackage != nil {
474+ ctx .JSON (http .StatusOK , gin.H {
475+ "Success" : true ,
476+ "Version" : * deploymentVersion .AppVersion ,
477+ "PackId" : * newPackage .Id ,
478+ "Size" : * newPackage .Size ,
479+ "Hash" : * newPackage .Hash ,
480+ "CreateTime" : * newPackage .CreateTime ,
481+ })
482+ } else {
483+ ctx .JSON (http .StatusOK , gin.H {
484+ "Success" : true ,
485+ "Version" : * deploymentVersion .AppVersion ,
486+ })
487+ }
488+ redis .DelRedisObj (constants .REDIS_UPDATE_INFO + * deployment .Key + "*" )
489+ } else {
490+ log .Panic (err .Error ())
491+ }
492+ }
0 commit comments