@@ -111,15 +111,16 @@ func (App) CreateBundle(ctx *gin.Context) {
111
111
// uuid, _ := uuid.NewUUID()
112
112
// hash := uuid.String()
113
113
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 (),
123
124
}
124
125
model.Create [model.Package ](& newPackage )
125
126
deploymentVersion .CurrentPackage = newPackage .Id
@@ -423,3 +424,69 @@ func (App) DelDeployment(ctx *gin.Context) {
423
424
log .Panic (err .Error ())
424
425
}
425
426
}
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