feat: 备份账号删除时,查询使用情况 (#670)

This commit is contained in:
ssongliu 2023-04-17 16:06:28 +08:00 committed by GitHub
parent 76b3cf4d2b
commit 5e887bd00c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 526 additions and 503 deletions

View File

@ -104,9 +104,9 @@ func (b *BaseApi) ListBuckets(c *gin.Context) {
// @Success 200
// @Security ApiKeyAuth
// @Router /settings/backup/del [post]
// @x-panel-log {"bodyKeys":["ids"],"paramKeys":[],"BeforeFuntions":[{"input_colume":"id","input_value":"ids","isList":true,"db":"backup_accounts","output_colume":"type","output_value":"types"}],"formatZH":"删除备份账号 [types]","formatEN":"delete backup account [types]"}
// @x-panel-log {"bodyKeys":["id"],"paramKeys":[],"BeforeFuntions":[{"input_colume":"id","input_value":"id","isList":true,"db":"backup_accounts","output_colume":"type","output_value":"types"}],"formatZH":"删除备份账号 [types]","formatEN":"delete backup account [types]"}
func (b *BaseApi) DeleteBackup(c *gin.Context) {
var req dto.BatchDeleteReq
var req dto.OperateByID
if err := c.ShouldBindJSON(&req); err != nil {
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
return
@ -116,7 +116,7 @@ func (b *BaseApi) DeleteBackup(c *gin.Context) {
return
}
if err := backupService.BatchDelete(req.Ids); err != nil {
if err := backupService.Delete(req.ID); err != nil {
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
return
}

View File

@ -20,6 +20,7 @@ type ICronjobRepo interface {
Page(limit, offset int, opts ...DBOption) (int64, []model.Cronjob, error)
Create(cronjob *model.Cronjob) error
WithByJobID(id int) DBOption
WithByBackupID(id uint) DBOption
WithByRecordDropID(id int) DBOption
Save(id uint, cronjob model.Cronjob) error
Update(id uint, vars map[string]interface{}) error
@ -114,6 +115,12 @@ func (c *CronjobRepo) WithByJobID(id int) DBOption {
}
}
func (c *CronjobRepo) WithByBackupID(id uint) DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("target_dir_id = ?", id)
}
}
func (c *CronjobRepo) WithByRecordDropID(id int) DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("id < ?", id)

View File

@ -9,6 +9,7 @@ import (
"github.com/1Panel-dev/1Panel/backend/app/dto"
"github.com/1Panel-dev/1Panel/backend/app/model"
"github.com/1Panel-dev/1Panel/backend/buserr"
"github.com/1Panel-dev/1Panel/backend/constant"
"github.com/1Panel-dev/1Panel/backend/global"
"github.com/1Panel-dev/1Panel/backend/utils/cloud_storage"
@ -26,7 +27,7 @@ type IBackupService interface {
Create(backupDto dto.BackupOperate) error
GetBuckets(backupDto dto.ForBuckets) ([]interface{}, error)
Update(ireq dto.BackupOperate) error
BatchDelete(ids []uint) error
Delete(id uint) error
BatchDeleteRecord(ids []uint) error
NewClient(backup *model.BackupAccount) (cloud_storage.CloudStorageClient, error)
@ -159,8 +160,12 @@ func (u *BackupService) GetBuckets(backupDto dto.ForBuckets) ([]interface{}, err
return client.ListBuckets()
}
func (u *BackupService) BatchDelete(ids []uint) error {
return backupRepo.Delete(commonRepo.WithIdsIn(ids))
func (u *BackupService) Delete(id uint) error {
cronjobs, _ := cronjobRepo.List(cronjobRepo.WithByBackupID(id))
if len(cronjobs) != 0 {
return buserr.New(constant.ErrBackupInUsed)
}
return backupRepo.Delete(commonRepo.WithByID(id))
}
func (u *BackupService) BatchDeleteRecord(ids []uint) error {

View File

@ -114,3 +114,7 @@ var (
ErrImageExist = "ErrImageExist"
ErrDelWithWebsite = "ErrDelWithWebsite"
)
var (
ErrBackupInUsed = "ErrBackupInUsed"
)

View File

@ -67,4 +67,7 @@ ErrDirNotFound: "The build folder does not exist! Please check file integrity
ErrFileNotExist: "{{ .detail }} file does not exist! Please check source file integrity"
ErrImageBuildErr: "Image build failed"
ErrImageExist: "Image is already exist"
ErrDelWithWebsite: "The operating environment has been associated with a website and cannot be deleted"
ErrDelWithWebsite: "The operating environment has been associated with a website and cannot be deleted"
#setting
ErrBackupInUsed: "The backup account is already being used in a cronjob and cannot be deleted."

View File

@ -67,4 +67,7 @@ ErrDirNotFound: "build 文件夹不存在!请检查文件完整性!"
ErrFileNotExist: "{{ .detail }} 文件不存在!请检查源文件完整性!"
ErrImageBuildErr: "镜像 build 失败"
ErrImageExist: "镜像已存在!"
ErrDelWithWebsite: "运行环境已经关联网站,无法删除"
ErrDelWithWebsite: "运行环境已经关联网站,无法删除"
#setting
ErrBackupInUsed: "该备份账号已在计划任务中使用,无法删除"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -98,7 +98,7 @@ export const editBackup = (params: Backup.BackupOperate) => {
}
return http.post(`/settings/backup/update`, reqest);
};
export const deleteBackup = (params: { ids: number[] }) => {
export const deleteBackup = (params: { id: number }) => {
return http.post(`/settings/backup/del`, params);
};
export const listBucket = (params: Backup.ForBucket) => {

View File

@ -50,7 +50,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button round :disabled="s3Data.id === 0" @click="onBatchDelete(s3Data)">
<el-button round :disabled="s3Data.id === 0" @click="onDelete(s3Data)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -88,7 +88,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button round :disabled="ossData.id === 0" @click="onBatchDelete(ossData)">
<el-button round :disabled="ossData.id === 0" @click="onDelete(ossData)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -126,7 +126,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button round :disabled="cosData.id === 0" @click="onBatchDelete(cosData)">
<el-button round :disabled="cosData.id === 0" @click="onDelete(cosData)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -161,7 +161,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button round :disabled="kodoData.id === 0" @click="onBatchDelete(kodoData)">
<el-button round :disabled="kodoData.id === 0" @click="onDelete(kodoData)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -199,7 +199,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button :disabled="minioData.id === 0" round @click="onBatchDelete(minioData)">
<el-button :disabled="minioData.id === 0" round @click="onDelete(minioData)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -235,7 +235,7 @@
>
{{ $t('commons.button.edit') }}
</el-button>
<el-button round :disabled="sftpData.id === 0" @click="onBatchDelete(sftpData)">
<el-button round :disabled="sftpData.id === 0" @click="onDelete(sftpData)">
{{ $t('commons.button.delete') }}
</el-button>
</div>
@ -401,10 +401,8 @@ const search = async () => {
}
};
const onBatchDelete = async (row: Backup.BackupInfo | null) => {
let ids: Array<number> = [];
ids.push(row.id);
await useDeleteData(deleteBackup, { ids: ids }, 'commons.msg.delete');
const onDelete = async (row: Backup.BackupInfo) => {
await useDeleteData(deleteBackup, { id: row.id }, 'commons.msg.delete');
search();
};