From 0aebdd08e1deb8b0f833bc848b94bc2c8c621212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Thu, 22 Jan 2026 04:14:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/ace/wire_gen.go | 2 +- internal/biz/backup.go | 2 +- internal/biz/backup_account.go | 35 -------- internal/biz/backup_storage.go | 35 ++++++++ internal/data/backup.go | 84 +++++++++---------- .../{backup_account.go => backup_storage.go} | 38 ++++----- internal/data/cron.go | 16 ++-- internal/http/request/backup.go | 6 +- .../{backup_account.go => backup_storage.go} | 10 +-- internal/http/request/cron.go | 4 +- internal/migration/v1.go | 8 +- internal/route/cli.go | 26 +++--- internal/route/http.go | 18 ++-- internal/service/backup.go | 2 +- .../{backup_account.go => backup_storage.go} | 32 +++---- internal/service/cli.go | 18 ++-- internal/service/service.go | 2 +- mocks/biz/BackupAccountRepo.go | 62 +++++++------- mocks/biz/BackupRepo.go | 22 ++--- pkg/types/backup.go | 2 +- web/src/api/panel/backup-storage/index.ts | 15 ++++ web/src/api/panel/backup/index.ts | 4 +- web/src/api/panel/backupAccount/index.ts | 15 ---- web/src/views/backup/IndexView.vue | 8 +- web/src/views/backup/ListView.vue | 40 +++++---- .../{AccountView.vue => StorageView.vue} | 22 ++--- web/src/views/task/CreateModal.vue | 28 ++++--- 27 files changed, 279 insertions(+), 277 deletions(-) delete mode 100644 internal/biz/backup_account.go create mode 100644 internal/biz/backup_storage.go rename internal/data/{backup_account.go => backup_storage.go} (69%) rename internal/http/request/{backup_account.go => backup_storage.go} (68%) rename internal/service/{backup_account.go => backup_storage.go} (78%) create mode 100644 web/src/api/panel/backup-storage/index.ts delete mode 100644 web/src/api/panel/backupAccount/index.ts rename web/src/views/backup/{AccountView.vue => StorageView.vue} (96%) diff --git a/cmd/ace/wire_gen.go b/cmd/ace/wire_gen.go index 2149211a..20a503ff 100644 --- a/cmd/ace/wire_gen.go +++ b/cmd/ace/wire_gen.go @@ -91,7 +91,7 @@ func initWeb() (*app.Web, error) { databaseUserService := service.NewDatabaseUserService(databaseUserRepo) backupService := service.NewBackupService(locale, backupRepo) backupAccountRepo := data.NewBackupAccountRepo(locale, db, logger, settingRepo) - backupAccountService := service.NewBackupAccountService(locale, backupAccountRepo) + backupAccountService := service.NewBackupStorageService(locale, backupAccountRepo) certService := service.NewCertService(locale, certRepo) certDNSRepo := data.NewCertDNSRepo(db, logger) certDNSService := service.NewCertDNSService(certDNSRepo) diff --git a/internal/biz/backup.go b/internal/biz/backup.go index 53e57b4e..1a3a757f 100644 --- a/internal/biz/backup.go +++ b/internal/biz/backup.go @@ -24,7 +24,7 @@ type BackupRepo interface { Delete(ctx context.Context, typ BackupType, name string) error Restore(ctx context.Context, typ BackupType, backup, target string) error ClearExpired(path, prefix string, save uint) error - ClearAccountExpired(account uint, typ BackupType, prefix string, save uint) error + ClearStorageExpired(account uint, typ BackupType, prefix string, save uint) error CutoffLog(path, target string) error GetDefaultPath(typ BackupType) string FixPanel() error diff --git a/internal/biz/backup_account.go b/internal/biz/backup_account.go deleted file mode 100644 index 3ea34ccf..00000000 --- a/internal/biz/backup_account.go +++ /dev/null @@ -1,35 +0,0 @@ -package biz - -import ( - "context" - "time" - - "github.com/acepanel/panel/internal/http/request" - "github.com/acepanel/panel/pkg/types" -) - -type BackupAccountType string - -const ( - BackupAccountTypeLocal BackupAccountType = "local" - BackupAccountTypeS3 BackupAccountType = "s3" - BackupAccountTypeSFTP BackupAccountType = "sftp" - BackupAccountTypeWebDav BackupAccountType = "webdav" -) - -type BackupAccount struct { - ID uint `gorm:"primaryKey" json:"id"` - Type BackupAccountType `gorm:"not null;default:''" json:"type"` - Name string `gorm:"not null;default:''" json:"name"` - Info types.BackupAccountInfo `gorm:"not null;default:'{}';serializer:json" json:"info"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` -} - -type BackupAccountRepo interface { - List(page, limit uint) ([]*BackupAccount, int64, error) - Get(id uint) (*BackupAccount, error) - Create(ctx context.Context, req *request.BackupAccountCreate) (*BackupAccount, error) - Update(ctx context.Context, req *request.BackupAccountUpdate) error - Delete(ctx context.Context, id uint) error -} diff --git a/internal/biz/backup_storage.go b/internal/biz/backup_storage.go new file mode 100644 index 00000000..c3a20f66 --- /dev/null +++ b/internal/biz/backup_storage.go @@ -0,0 +1,35 @@ +package biz + +import ( + "context" + "time" + + "github.com/acepanel/panel/internal/http/request" + "github.com/acepanel/panel/pkg/types" +) + +type BackupStorageType string + +const ( + BackupStorageTypeLocal BackupStorageType = "local" + BackupStorageTypeS3 BackupStorageType = "s3" + BackupStorageTypeSFTP BackupStorageType = "sftp" + BackupStorageTypeWebDAV BackupStorageType = "webdav" +) + +type BackupStorage struct { + ID uint `gorm:"primaryKey" json:"id"` + Type BackupStorageType `gorm:"not null;default:''" json:"type"` + Name string `gorm:"not null;default:''" json:"name"` + Info types.BackupStorageInfo `gorm:"not null;default:'{}';serializer:json" json:"info"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type BackupAccountRepo interface { + List(page, limit uint) ([]*BackupStorage, int64, error) + Get(id uint) (*BackupStorage, error) + Create(ctx context.Context, req *request.BackupStorageCreate) (*BackupStorage, error) + Update(ctx context.Context, req *request.BackupStorageUpdate) error + Delete(ctx context.Context, id uint) error +} diff --git a/internal/data/backup.go b/internal/data/backup.go index 2998b896..a92b637c 100644 --- a/internal/data/backup.go +++ b/internal/data/backup.go @@ -75,28 +75,28 @@ func (r *backupRepo) List(typ biz.BackupType) ([]*types.BackupFile, error) { // Create 创建备份 // typ 备份类型 // target 目标名称 -// account 备份账号ID -func (r *backupRepo) Create(ctx context.Context, typ biz.BackupType, target string, account uint) error { - // 取备份账号,0 为本地备份 - backupAccount := new(biz.BackupAccount) - if account != 0 { - if err := r.db.First(backupAccount, account).Error; err != nil { +// storage 备份存储ID +func (r *backupRepo) Create(ctx context.Context, typ biz.BackupType, target string, storage uint) error { + // 取备份存储,0 为本地备份 + backupStorage := new(biz.BackupStorage) + if storage != 0 { + if err := r.db.First(backupStorage, storage).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - return errors.New(r.t.Get("backup account not found")) + return errors.New(r.t.Get("backup storage not found")) } return err } } else { - backupAccount = &biz.BackupAccount{ + backupStorage = &biz.BackupStorage{ Name: r.t.Get("Local Storage"), - Type: biz.BackupAccountTypeLocal, - Info: types.BackupAccountInfo{ + Type: biz.BackupStorageTypeLocal, + Info: types.BackupStorageInfo{ Path: filepath.Dir(r.GetDefaultPath(typ)), // 需要取根目录 }, } } - client, err := r.getStorage(*backupAccount) + client, err := r.getStorage(*backupStorage) if err != nil { return err } @@ -108,7 +108,7 @@ func (r *backupRepo) Create(ctx context.Context, typ biz.BackupType, target stri fmt.Println(r.t.Get("★ Start backup [%s]", start.Format(time.DateTime))) fmt.Println(r.hr) fmt.Println(r.t.Get("|-Backup type: %s", string(typ))) - fmt.Println(r.t.Get("|-Backup account: %s", backupAccount.Name)) + fmt.Println(r.t.Get("|-Backup storage: %s", backupStorage.Name)) fmt.Println(r.t.Get("|-Backup target: %s", target)) } @@ -326,17 +326,17 @@ func (r *backupRepo) ClearExpired(path, prefix string, save uint) error { return nil } -// ClearAccountExpired 清理备份账号过期备份 -func (r *backupRepo) ClearAccountExpired(account uint, typ biz.BackupType, prefix string, save uint) error { - backupAccount := new(biz.BackupAccount) - if err := r.db.First(backupAccount, account).Error; err != nil { +// ClearStorageExpired 清理备份账号过期备份 +func (r *backupRepo) ClearStorageExpired(storage uint, typ biz.BackupType, prefix string, save uint) error { + backupStorage := new(biz.BackupStorage) + if err := r.db.First(backupStorage, storage).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - return errors.New(r.t.Get("backup account not found")) + return errors.New(r.t.Get("backup storage not found")) } return err } - client, err := r.getStorage(*backupAccount) + client, err := r.getStorage(*backupStorage) if err != nil { return err } @@ -391,35 +391,35 @@ func (r *backupRepo) ClearAccountExpired(account uint, typ biz.BackupType, prefi } // getStorage 获取存储器 -func (r *backupRepo) getStorage(account biz.BackupAccount) (storage.Storage, error) { - switch account.Type { - case biz.BackupAccountTypeLocal: - return storage.NewLocal(account.Info.Path) - case biz.BackupAccountTypeS3: +func (r *backupRepo) getStorage(backupStorage biz.BackupStorage) (storage.Storage, error) { + switch backupStorage.Type { + case biz.BackupStorageTypeLocal: + return storage.NewLocal(backupStorage.Info.Path) + case biz.BackupStorageTypeS3: return storage.NewS3(storage.S3Config{ - Region: account.Info.Region, - Bucket: account.Info.Bucket, - AccessKeyID: account.Info.AccessKey, - SecretAccessKey: account.Info.SecretKey, - Endpoint: account.Info.Endpoint, - BasePath: account.Info.Path, - AddressingStyle: storage.S3AddressingStyle(account.Info.Style), + Region: backupStorage.Info.Region, + Bucket: backupStorage.Info.Bucket, + AccessKeyID: backupStorage.Info.AccessKey, + SecretAccessKey: backupStorage.Info.SecretKey, + Endpoint: backupStorage.Info.Endpoint, + BasePath: backupStorage.Info.Path, + AddressingStyle: storage.S3AddressingStyle(backupStorage.Info.Style), }) - case biz.BackupAccountTypeSFTP: + case biz.BackupStorageTypeSFTP: return storage.NewSFTP(storage.SFTPConfig{ - Host: account.Info.Host, - Port: account.Info.Port, - Username: account.Info.Username, - Password: account.Info.Password, - PrivateKey: account.Info.PrivateKey, - BasePath: account.Info.Path, + Host: backupStorage.Info.Host, + Port: backupStorage.Info.Port, + Username: backupStorage.Info.Username, + Password: backupStorage.Info.Password, + PrivateKey: backupStorage.Info.PrivateKey, + BasePath: backupStorage.Info.Path, }) - case biz.BackupAccountTypeWebDav: + case biz.BackupStorageTypeWebDAV: return storage.NewWebDav(storage.WebDavConfig{ - URL: account.Info.URL, - Username: account.Info.Username, - Password: account.Info.Password, - BasePath: account.Info.Path, + URL: backupStorage.Info.URL, + Username: backupStorage.Info.Username, + Password: backupStorage.Info.Password, + BasePath: backupStorage.Info.Path, }) default: return nil, errors.New(r.t.Get("unknown storage type")) diff --git a/internal/data/backup_account.go b/internal/data/backup_storage.go similarity index 69% rename from internal/data/backup_account.go rename to internal/data/backup_storage.go index b754651b..0baba450 100644 --- a/internal/data/backup_account.go +++ b/internal/data/backup_storage.go @@ -28,20 +28,20 @@ func NewBackupAccountRepo(t *gotext.Locale, db *gorm.DB, log *slog.Logger, setti } } -func (r backupAccountRepo) List(page, limit uint) ([]*biz.BackupAccount, int64, error) { +func (r backupAccountRepo) List(page, limit uint) ([]*biz.BackupStorage, int64, error) { // 本地存储 localStorage, err := r.Get(0) if err != nil { return nil, 0, err } - var dbAccounts []*biz.BackupAccount + var dbAccounts []*biz.BackupStorage var total int64 - if err = r.db.Model(&biz.BackupAccount{}).Order("id asc").Count(&total).Offset(int((page - 1) * limit)).Limit(int(limit)).Find(&dbAccounts).Error; err != nil { + if err = r.db.Model(&biz.BackupStorage{}).Order("id asc").Count(&total).Offset(int((page - 1) * limit)).Limit(int(limit)).Find(&dbAccounts).Error; err != nil { return nil, 0, err } - accounts := make([]*biz.BackupAccount, 0, len(dbAccounts)+1) + accounts := make([]*biz.BackupStorage, 0, len(dbAccounts)+1) if page == 1 { accounts = append(accounts, localStorage) } @@ -50,30 +50,30 @@ func (r backupAccountRepo) List(page, limit uint) ([]*biz.BackupAccount, int64, return accounts, total + 1, nil } -func (r backupAccountRepo) Get(id uint) (*biz.BackupAccount, error) { +func (r backupAccountRepo) Get(id uint) (*biz.BackupStorage, error) { if id == 0 { path, err := r.setting.Get(biz.SettingKeyBackupPath) if err != nil { return nil, err } - return &biz.BackupAccount{ + return &biz.BackupStorage{ ID: 0, - Type: biz.BackupAccountTypeLocal, + Type: biz.BackupStorageTypeLocal, Name: r.t.Get("Local Storage"), - Info: types.BackupAccountInfo{ + Info: types.BackupStorageInfo{ Path: path, }, }, nil } - account := new(biz.BackupAccount) - err := r.db.Model(&biz.BackupAccount{}).Where("id = ?", id).First(account).Error + account := new(biz.BackupStorage) + err := r.db.Model(&biz.BackupStorage{}).Where("id = ?", id).First(account).Error return account, err } -func (r backupAccountRepo) Create(ctx context.Context, req *request.BackupAccountCreate) (*biz.BackupAccount, error) { - account := &biz.BackupAccount{ - Type: biz.BackupAccountType(req.Type), +func (r backupAccountRepo) Create(ctx context.Context, req *request.BackupStorageCreate) (*biz.BackupStorage, error) { + account := &biz.BackupStorage{ + Type: biz.BackupStorageType(req.Type), Name: req.Name, Info: req.Info, } @@ -82,18 +82,18 @@ func (r backupAccountRepo) Create(ctx context.Context, req *request.BackupAccoun return nil, err } - r.log.Info("backup account created", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(account.ID)), slog.String("account_type", req.Type), slog.String("name", req.Name)) + r.log.Info("backup storage created", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(account.ID)), slog.String("account_type", req.Type), slog.String("name", req.Name)) return account, nil } -func (r backupAccountRepo) Update(ctx context.Context, req *request.BackupAccountUpdate) error { +func (r backupAccountRepo) Update(ctx context.Context, req *request.BackupStorageUpdate) error { account, err := r.Get(req.ID) if err != nil { return err } - account.Type = biz.BackupAccountType(req.Type) + account.Type = biz.BackupStorageType(req.Type) account.Name = req.Name account.Info = req.Info @@ -101,17 +101,17 @@ func (r backupAccountRepo) Update(ctx context.Context, req *request.BackupAccoun return err } - r.log.Info("backup account updated", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(req.ID)), slog.String("account_type", req.Type)) + r.log.Info("backup storage updated", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(req.ID)), slog.String("account_type", req.Type)) return nil } func (r backupAccountRepo) Delete(ctx context.Context, id uint) error { - if err := r.db.Model(&biz.BackupAccount{}).Where("id = ?", id).Delete(&biz.BackupAccount{}).Error; err != nil { + if err := r.db.Model(&biz.BackupStorage{}).Where("id = ?", id).Delete(&biz.BackupStorage{}).Error; err != nil { return err } - r.log.Info("backup account deleted", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(id))) + r.log.Info("backup storage deleted", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(id))) return nil } diff --git a/internal/data/cron.go b/internal/data/cron.go index 9b517b89..e45340d3 100644 --- a/internal/data/cron.go +++ b/internal/data/cron.go @@ -66,17 +66,17 @@ func (r *cronRepo) Create(ctx context.Context, req *request.CronCreate) error { script = fmt.Sprintf(`#!/bin/bash export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH -acepanel backup website -n '%s' -a '%d' -acepanel backup clear -t website -f '%s' -s '%d' -a '%d' -`, req.Target, req.BackupAccount, req.Target, req.Save, req.BackupAccount) +acepanel backup website -n '%s' -s '%d' +acepanel backup clear -t website -f '%s' -k '%d' -s '%d' +`, req.Target, req.BackupStorage, req.Target, req.Keep, req.BackupStorage) } if req.BackupType == "mysql" || req.BackupType == "postgres" { script = fmt.Sprintf(`#!/bin/bash export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH -acepanel backup database -t '%s' -n '%s' -a '%d' -acepanel backup clear -t '%s' -f '%s' -s '%d' -a '%d' -`, req.BackupType, req.Target, req.BackupAccount, req.BackupType, req.Target, req.Save, req.BackupAccount) +acepanel backup database -t '%s' -n '%s' -s '%d' +acepanel backup clear -t '%s' -f '%s' -k '%d' -s '%d' +`, req.BackupType, req.Target, req.BackupStorage, req.BackupType, req.Target, req.Keep, req.BackupStorage) } } if req.Type == "cutoff" { @@ -84,8 +84,8 @@ acepanel backup clear -t '%s' -f '%s' -s '%d' -a '%d' export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH acepanel cutoff website -n '%s' -acepanel cutoff clear -t website -n '%s' -s '%d' -`, req.Target, req.Target, req.Save) +acepanel cutoff clear -t website -n '%s' -k '%d' +`, req.Target, req.Target, req.Keep) } if req.Type == "shell" { script = req.Script diff --git a/internal/http/request/backup.go b/internal/http/request/backup.go index cff3cf3a..142d3f1d 100644 --- a/internal/http/request/backup.go +++ b/internal/http/request/backup.go @@ -7,9 +7,9 @@ type BackupList struct { } type BackupCreate struct { - Type string `uri:"type" form:"type" validate:"required|in:website,mysql,postgres,redis,panel"` - Target string `json:"target" form:"target" validate:"required|regex:^[a-zA-Z0-9_-]+$"` - AccountID uint `form:"account_id" json:"account_id" validate:"required|exists:backup_accounts,id"` + Type string `uri:"type" form:"type" validate:"required|in:website,mysql,postgres,redis,panel"` + Target string `json:"target" form:"target" validate:"required|regex:^[a-zA-Z0-9_-]+$"` + Storage uint `form:"storage" json:"storage" validate:"required|exists:backup_storages,id"` } type BackupUpload struct { diff --git a/internal/http/request/backup_account.go b/internal/http/request/backup_storage.go similarity index 68% rename from internal/http/request/backup_account.go rename to internal/http/request/backup_storage.go index c4c4f216..742a9a4e 100644 --- a/internal/http/request/backup_account.go +++ b/internal/http/request/backup_storage.go @@ -2,15 +2,15 @@ package request import "github.com/acepanel/panel/pkg/types" -type BackupAccountCreate struct { +type BackupStorageCreate struct { Type string `form:"type" json:"type" validate:"required|in:s3,sftp,webdav"` Name string `form:"name" json:"name" validate:"required"` - Info types.BackupAccountInfo `form:"info" json:"info"` + Info types.BackupStorageInfo `form:"info" json:"info"` } -type BackupAccountUpdate struct { - ID uint `form:"id" json:"id" validate:"required|exists:backup_accounts,id"` +type BackupStorageUpdate struct { + ID uint `form:"id" json:"id" validate:"required|exists:backup_storages,id"` Type string `form:"type" json:"type" validate:"required|in:s3,sftp,webdav"` Name string `form:"name" json:"name" validate:"required"` - Info types.BackupAccountInfo `form:"info" json:"info"` + Info types.BackupStorageInfo `form:"info" json:"info"` } diff --git a/internal/http/request/cron.go b/internal/http/request/cron.go index a9ba8335..28890b3e 100644 --- a/internal/http/request/cron.go +++ b/internal/http/request/cron.go @@ -6,9 +6,9 @@ type CronCreate struct { Time string `form:"time" json:"time" validate:"required|cron"` Script string `form:"script" json:"script"` BackupType string `form:"backup_type" json:"backup_type" validate:"requiredIf:Type,backup"` - BackupAccount uint `form:"backup_account" json:"backup_account"` + BackupStorage uint `form:"backup_storage" json:"backup_storage"` Target string `form:"target" json:"target" validate:"requiredIf:Type,backup,cutoff"` - Save int `form:"save" json:"save" validate:"required"` + Keep uint `form:"keep" json:"keep" validate:"required"` } type CronUpdate struct { diff --git a/internal/migration/v1.go b/internal/migration/v1.go index 2b4b6d83..41b9ebb2 100644 --- a/internal/migration/v1.go +++ b/internal/migration/v1.go @@ -62,14 +62,10 @@ func init() { Migrations = append(Migrations, &gormigrate.Migration{ ID: "20260120-add-backup", Migrate: func(tx *gorm.DB) error { - return tx.AutoMigrate( - &biz.BackupAccount{}, - ) + return tx.AutoMigrate(&biz.BackupStorage{}) }, Rollback: func(tx *gorm.DB) error { - return tx.Migrator().DropTable( - &biz.BackupAccount{}, - ) + return tx.Migrator().DropTable(&biz.BackupStorage{}) }, }) } diff --git a/internal/route/cli.go b/internal/route/cli.go index 77f4f671..c36cbcb9 100644 --- a/internal/route/cli.go +++ b/internal/route/cli.go @@ -302,9 +302,9 @@ func (route *Cli) Commands() []*cli.Command { Required: true, }, &cli.UintFlag{ - Name: "account", - Aliases: []string{"a"}, - Usage: route.t.Get("Account ID (default account if not filled)"), + Name: "storage", + Aliases: []string{"s"}, + Usage: route.t.Get("Storage ID (local storage if not filled)"), }, }, }, @@ -326,9 +326,9 @@ func (route *Cli) Commands() []*cli.Command { Required: true, }, &cli.UintFlag{ - Name: "account", - Aliases: []string{"a"}, - Usage: route.t.Get("Account ID (default account if not filled)"), + Name: "storage", + Aliases: []string{"s"}, + Usage: route.t.Get("Storage ID (local storage if not filled)"), }, }, }, @@ -356,15 +356,15 @@ func (route *Cli) Commands() []*cli.Command { Required: true, }, &cli.UintFlag{ - Name: "save", - Aliases: []string{"s"}, + Name: "keep", + Aliases: []string{"k"}, Usage: route.t.Get("Number of backups to keep"), Required: true, }, &cli.UintFlag{ - Name: "account", - Aliases: []string{"a"}, - Usage: route.t.Get("Account ID (default account if not filled)"), + Name: "storage", + Aliases: []string{"s"}, + Usage: route.t.Get("Storage ID (local storage if not filled)"), }, }, }, @@ -410,8 +410,8 @@ func (route *Cli) Commands() []*cli.Command { Required: true, }, &cli.UintFlag{ - Name: "save", - Aliases: []string{"s"}, + Name: "keep", + Aliases: []string{"k"}, Usage: route.t.Get("Number of logs to keep"), Required: true, }, diff --git a/internal/route/http.go b/internal/route/http.go index 1c8c5494..0b17ee71 100644 --- a/internal/route/http.go +++ b/internal/route/http.go @@ -27,7 +27,7 @@ type Http struct { databaseServer *service.DatabaseServerService databaseUser *service.DatabaseUserService backup *service.BackupService - backupAccount *service.BackupAccountService + backupStorage *service.BackupStorageService cert *service.CertService certDNS *service.CertDNSService certAccount *service.CertAccountService @@ -75,7 +75,7 @@ func NewHttp( databaseServer *service.DatabaseServerService, databaseUser *service.DatabaseUserService, backup *service.BackupService, - backupAccount *service.BackupAccountService, + backupStorage *service.BackupStorageService, cert *service.CertService, certDNS *service.CertDNSService, certAccount *service.CertAccountService, @@ -122,7 +122,7 @@ func NewHttp( databaseServer: databaseServer, databaseUser: databaseUser, backup: backup, - backupAccount: backupAccount, + backupStorage: backupStorage, cert: cert, certDNS: certDNS, certAccount: certAccount, @@ -268,12 +268,12 @@ func (route *Http) Register(r *chi.Mux) { r.Post("/{type}/restore", route.backup.Restore) }) - r.Route("/backup_account", func(r chi.Router) { - r.Get("/", route.backupAccount.List) - r.Post("/", route.backupAccount.Create) - r.Put("/{id}", route.backupAccount.Update) - r.Get("/{id}", route.backupAccount.Get) - r.Delete("/{id}", route.backupAccount.Delete) + r.Route("/backup_storage", func(r chi.Router) { + r.Get("/", route.backupStorage.List) + r.Post("/", route.backupStorage.Create) + r.Put("/{id}", route.backupStorage.Update) + r.Get("/{id}", route.backupStorage.Get) + r.Delete("/{id}", route.backupStorage.Delete) }) r.Route("/cert", func(r chi.Router) { diff --git a/internal/service/backup.go b/internal/service/backup.go index 6bf212b8..2165e361 100644 --- a/internal/service/backup.go +++ b/internal/service/backup.go @@ -55,7 +55,7 @@ func (s *BackupService) Create(w http.ResponseWriter, r *http.Request) { return } - if err = s.backupRepo.Create(r.Context(), biz.BackupType(req.Type), req.Target, req.AccountID); err != nil { + if err = s.backupRepo.Create(r.Context(), biz.BackupType(req.Type), req.Target, req.Storage); err != nil { Error(w, http.StatusInternalServerError, "%v", err) return } diff --git a/internal/service/backup_account.go b/internal/service/backup_storage.go similarity index 78% rename from internal/service/backup_account.go rename to internal/service/backup_storage.go index 3d62432a..da59fbb8 100644 --- a/internal/service/backup_account.go +++ b/internal/service/backup_storage.go @@ -13,19 +13,19 @@ import ( "github.com/acepanel/panel/pkg/types" ) -type BackupAccountService struct { +type BackupStorageService struct { t *gotext.Locale backupAccountRepo biz.BackupAccountRepo } -func NewBackupAccountService(t *gotext.Locale, backupAccount biz.BackupAccountRepo) *BackupAccountService { - return &BackupAccountService{ +func NewBackupStorageService(t *gotext.Locale, backupAccount biz.BackupAccountRepo) *BackupStorageService { + return &BackupStorageService{ t: t, backupAccountRepo: backupAccount, } } -func (s *BackupAccountService) List(w http.ResponseWriter, r *http.Request) { +func (s *BackupStorageService) List(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.Paginate](r) if err != nil { Error(w, http.StatusUnprocessableEntity, "%v", err) @@ -44,8 +44,8 @@ func (s *BackupAccountService) List(w http.ResponseWriter, r *http.Request) { }) } -func (s *BackupAccountService) Create(w http.ResponseWriter, r *http.Request) { - req, err := Bind[request.BackupAccountCreate](r) +func (s *BackupStorageService) Create(w http.ResponseWriter, r *http.Request) { + req, err := Bind[request.BackupStorageCreate](r) if err != nil { Error(w, http.StatusUnprocessableEntity, "%v", err) return @@ -65,8 +65,8 @@ func (s *BackupAccountService) Create(w http.ResponseWriter, r *http.Request) { Success(w, account) } -func (s *BackupAccountService) Update(w http.ResponseWriter, r *http.Request) { - req, err := Bind[request.BackupAccountUpdate](r) +func (s *BackupStorageService) Update(w http.ResponseWriter, r *http.Request) { + req, err := Bind[request.BackupStorageUpdate](r) if err != nil { Error(w, http.StatusUnprocessableEntity, "%v", err) return @@ -85,7 +85,7 @@ func (s *BackupAccountService) Update(w http.ResponseWriter, r *http.Request) { Success(w, nil) } -func (s *BackupAccountService) Get(w http.ResponseWriter, r *http.Request) { +func (s *BackupStorageService) Get(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.ID](r) if err != nil { Error(w, http.StatusUnprocessableEntity, "%v", err) @@ -101,7 +101,7 @@ func (s *BackupAccountService) Get(w http.ResponseWriter, r *http.Request) { Success(w, account) } -func (s *BackupAccountService) Delete(w http.ResponseWriter, r *http.Request) { +func (s *BackupStorageService) Delete(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.ID](r) if err != nil { Error(w, http.StatusUnprocessableEntity, "%v", err) @@ -116,13 +116,13 @@ func (s *BackupAccountService) Delete(w http.ResponseWriter, r *http.Request) { Success(w, nil) } -// validateStorage 验证存储账号配置是否正确 -func (s *BackupAccountService) validateStorage(accountType string, info types.BackupAccountInfo) error { +// validateStorage 验证存储配置是否正确 +func (s *BackupStorageService) validateStorage(accountType string, info types.BackupStorageInfo) error { var err error var client storage.Storage - switch biz.BackupAccountType(accountType) { - case biz.BackupAccountTypeS3: + switch biz.BackupStorageType(accountType) { + case biz.BackupStorageTypeS3: client, err = storage.NewS3(storage.S3Config{ Region: info.Region, Bucket: info.Bucket, @@ -135,7 +135,7 @@ func (s *BackupAccountService) validateStorage(accountType string, info types.Ba if err != nil { return errors.New(s.t.Get("s3 configuration error: %v", err)) } - case biz.BackupAccountTypeSFTP: + case biz.BackupStorageTypeSFTP: client, err = storage.NewSFTP(storage.SFTPConfig{ Host: info.Host, Port: info.Port, @@ -147,7 +147,7 @@ func (s *BackupAccountService) validateStorage(accountType string, info types.Ba if err != nil { return errors.New(s.t.Get("sftp configuration error: %v", err)) } - case biz.BackupAccountTypeWebDav: + case biz.BackupStorageTypeWebDAV: client, err = storage.NewWebDav(storage.WebDavConfig{ URL: info.URL, Username: info.Username, diff --git a/internal/service/cli.go b/internal/service/cli.go index 3457ce32..f43f65d3 100644 --- a/internal/service/cli.go +++ b/internal/service/cli.go @@ -628,12 +628,12 @@ func (s *CliService) DatabaseDeleteServer(ctx context.Context, cmd *cli.Command) } func (s *CliService) BackupWebsite(ctx context.Context, cmd *cli.Command) error { - _ = s.backupRepo.Create(ctx, biz.BackupTypeWebsite, cmd.String("name"), cmd.Uint("account")) + _ = s.backupRepo.Create(ctx, biz.BackupTypeWebsite, cmd.String("name"), cmd.Uint("storage")) return nil } func (s *CliService) BackupDatabase(ctx context.Context, cmd *cli.Command) error { - _ = s.backupRepo.Create(ctx, biz.BackupType(cmd.String("type")), cmd.String("name"), cmd.Uint("account")) + _ = s.backupRepo.Create(ctx, biz.BackupType(cmd.String("type")), cmd.String("name"), cmd.Uint("storage")) return nil } @@ -658,15 +658,15 @@ func (s *CliService) BackupClear(ctx context.Context, cmd *cli.Command) error { fmt.Println(s.hr) fmt.Println(s.t.Get("|-Cleaning type: %s", cmd.String("type"))) fmt.Println(s.t.Get("|-Cleaning target: %s", cmd.String("file"))) - fmt.Println(s.t.Get("|-Keep count: %d", cmd.Uint("save"))) + fmt.Println(s.t.Get("|-Keep count: %d", cmd.Uint("keep"))) - if cmd.Uint("account") != 0 { - if err := s.backupRepo.ClearAccountExpired(cmd.Uint("account"), biz.BackupType(cmd.String("type")), cmd.String("file"), cmd.Uint("save")); err != nil { + if cmd.Uint("storage") != 0 { + if err := s.backupRepo.ClearStorageExpired(cmd.Uint("storage"), biz.BackupType(cmd.String("type")), cmd.String("file"), cmd.Uint("keep")); err != nil { return errors.New(s.t.Get("Cleaning failed: %v", err)) } } else { path := s.backupRepo.GetDefaultPath(biz.BackupType(cmd.String("type"))) - if err := s.backupRepo.ClearExpired(path, cmd.String("file"), cmd.Uint("save")); err != nil { + if err := s.backupRepo.ClearExpired(path, cmd.String("file"), cmd.Uint("keep")); err != nil { return errors.New(s.t.Get("Cleaning failed: %v", err)) } } @@ -724,11 +724,11 @@ func (s *CliService) CutoffClear(ctx context.Context, cmd *cli.Command) error { fmt.Println(s.hr) fmt.Println(s.t.Get("|-Cleaning type: %s", cmd.String("type"))) fmt.Println(s.t.Get("|-Cleaning target: %s", website.Name)) - fmt.Println(s.t.Get("|-Keep count: %d", cmd.Uint("save"))) - if err = s.backupRepo.ClearExpired(path, "access.log", cmd.Uint("save")); err != nil { + fmt.Println(s.t.Get("|-Keep count: %d", cmd.Uint("keep"))) + if err = s.backupRepo.ClearExpired(path, "access.log", cmd.Uint("keep")); err != nil { return err } - if err = s.backupRepo.ClearExpired(path, "error.log", cmd.Uint("save")); err != nil { + if err = s.backupRepo.ClearExpired(path, "error.log", cmd.Uint("keep")); err != nil { return err } fmt.Println(s.hr) diff --git a/internal/service/service.go b/internal/service/service.go index eb7ad5d7..56cede8d 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -6,7 +6,7 @@ import "github.com/google/wire" var ProviderSet = wire.NewSet( NewAppService, NewBackupService, - NewBackupAccountService, + NewBackupStorageService, NewCertService, NewCertAccountService, NewCertDNSService, diff --git a/mocks/biz/BackupAccountRepo.go b/mocks/biz/BackupAccountRepo.go index 924f2fac..e2f3ccf7 100644 --- a/mocks/biz/BackupAccountRepo.go +++ b/mocks/biz/BackupAccountRepo.go @@ -26,27 +26,27 @@ func (_m *BackupAccountRepo) EXPECT() *BackupAccountRepo_Expecter { } // Create provides a mock function with given fields: ctx, req -func (_m *BackupAccountRepo) Create(ctx context.Context, req *request.BackupAccountCreate) (*biz.BackupAccount, error) { +func (_m *BackupAccountRepo) Create(ctx context.Context, req *request.BackupStorageCreate) (*biz.BackupStorage, error) { ret := _m.Called(ctx, req) if len(ret) == 0 { panic("no return value specified for Create") } - var r0 *biz.BackupAccount + var r0 *biz.BackupStorage var r1 error - if rf, ok := ret.Get(0).(func(context.Context, *request.BackupAccountCreate) (*biz.BackupAccount, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, *request.BackupStorageCreate) (*biz.BackupStorage, error)); ok { return rf(ctx, req) } - if rf, ok := ret.Get(0).(func(context.Context, *request.BackupAccountCreate) *biz.BackupAccount); ok { + if rf, ok := ret.Get(0).(func(context.Context, *request.BackupStorageCreate) *biz.BackupStorage); ok { r0 = rf(ctx, req) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*biz.BackupAccount) + r0 = ret.Get(0).(*biz.BackupStorage) } } - if rf, ok := ret.Get(1).(func(context.Context, *request.BackupAccountCreate) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, *request.BackupStorageCreate) error); ok { r1 = rf(ctx, req) } else { r1 = ret.Error(1) @@ -62,24 +62,24 @@ type BackupAccountRepo_Create_Call struct { // Create is a helper method to define mock.On call // - ctx context.Context -// - req *request.BackupAccountCreate +// - req *request.BackupStorageCreate func (_e *BackupAccountRepo_Expecter) Create(ctx interface{}, req interface{}) *BackupAccountRepo_Create_Call { return &BackupAccountRepo_Create_Call{Call: _e.mock.On("Create", ctx, req)} } -func (_c *BackupAccountRepo_Create_Call) Run(run func(ctx context.Context, req *request.BackupAccountCreate)) *BackupAccountRepo_Create_Call { +func (_c *BackupAccountRepo_Create_Call) Run(run func(ctx context.Context, req *request.BackupStorageCreate)) *BackupAccountRepo_Create_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(*request.BackupAccountCreate)) + run(args[0].(context.Context), args[1].(*request.BackupStorageCreate)) }) return _c } -func (_c *BackupAccountRepo_Create_Call) Return(_a0 *biz.BackupAccount, _a1 error) *BackupAccountRepo_Create_Call { +func (_c *BackupAccountRepo_Create_Call) Return(_a0 *biz.BackupStorage, _a1 error) *BackupAccountRepo_Create_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *BackupAccountRepo_Create_Call) RunAndReturn(run func(context.Context, *request.BackupAccountCreate) (*biz.BackupAccount, error)) *BackupAccountRepo_Create_Call { +func (_c *BackupAccountRepo_Create_Call) RunAndReturn(run func(context.Context, *request.BackupStorageCreate) (*biz.BackupStorage, error)) *BackupAccountRepo_Create_Call { _c.Call.Return(run) return _c } @@ -132,23 +132,23 @@ func (_c *BackupAccountRepo_Delete_Call) RunAndReturn(run func(context.Context, } // Get provides a mock function with given fields: id -func (_m *BackupAccountRepo) Get(id uint) (*biz.BackupAccount, error) { +func (_m *BackupAccountRepo) Get(id uint) (*biz.BackupStorage, error) { ret := _m.Called(id) if len(ret) == 0 { panic("no return value specified for Get") } - var r0 *biz.BackupAccount + var r0 *biz.BackupStorage var r1 error - if rf, ok := ret.Get(0).(func(uint) (*biz.BackupAccount, error)); ok { + if rf, ok := ret.Get(0).(func(uint) (*biz.BackupStorage, error)); ok { return rf(id) } - if rf, ok := ret.Get(0).(func(uint) *biz.BackupAccount); ok { + if rf, ok := ret.Get(0).(func(uint) *biz.BackupStorage); ok { r0 = rf(id) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*biz.BackupAccount) + r0 = ret.Get(0).(*biz.BackupStorage) } } @@ -179,35 +179,35 @@ func (_c *BackupAccountRepo_Get_Call) Run(run func(id uint)) *BackupAccountRepo_ return _c } -func (_c *BackupAccountRepo_Get_Call) Return(_a0 *biz.BackupAccount, _a1 error) *BackupAccountRepo_Get_Call { +func (_c *BackupAccountRepo_Get_Call) Return(_a0 *biz.BackupStorage, _a1 error) *BackupAccountRepo_Get_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *BackupAccountRepo_Get_Call) RunAndReturn(run func(uint) (*biz.BackupAccount, error)) *BackupAccountRepo_Get_Call { +func (_c *BackupAccountRepo_Get_Call) RunAndReturn(run func(uint) (*biz.BackupStorage, error)) *BackupAccountRepo_Get_Call { _c.Call.Return(run) return _c } // List provides a mock function with given fields: page, limit -func (_m *BackupAccountRepo) List(page uint, limit uint) ([]*biz.BackupAccount, int64, error) { +func (_m *BackupAccountRepo) List(page uint, limit uint) ([]*biz.BackupStorage, int64, error) { ret := _m.Called(page, limit) if len(ret) == 0 { panic("no return value specified for List") } - var r0 []*biz.BackupAccount + var r0 []*biz.BackupStorage var r1 int64 var r2 error - if rf, ok := ret.Get(0).(func(uint, uint) ([]*biz.BackupAccount, int64, error)); ok { + if rf, ok := ret.Get(0).(func(uint, uint) ([]*biz.BackupStorage, int64, error)); ok { return rf(page, limit) } - if rf, ok := ret.Get(0).(func(uint, uint) []*biz.BackupAccount); ok { + if rf, ok := ret.Get(0).(func(uint, uint) []*biz.BackupStorage); ok { r0 = rf(page, limit) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*biz.BackupAccount) + r0 = ret.Get(0).([]*biz.BackupStorage) } } @@ -245,18 +245,18 @@ func (_c *BackupAccountRepo_List_Call) Run(run func(page uint, limit uint)) *Bac return _c } -func (_c *BackupAccountRepo_List_Call) Return(_a0 []*biz.BackupAccount, _a1 int64, _a2 error) *BackupAccountRepo_List_Call { +func (_c *BackupAccountRepo_List_Call) Return(_a0 []*biz.BackupStorage, _a1 int64, _a2 error) *BackupAccountRepo_List_Call { _c.Call.Return(_a0, _a1, _a2) return _c } -func (_c *BackupAccountRepo_List_Call) RunAndReturn(run func(uint, uint) ([]*biz.BackupAccount, int64, error)) *BackupAccountRepo_List_Call { +func (_c *BackupAccountRepo_List_Call) RunAndReturn(run func(uint, uint) ([]*biz.BackupStorage, int64, error)) *BackupAccountRepo_List_Call { _c.Call.Return(run) return _c } // Update provides a mock function with given fields: ctx, req -func (_m *BackupAccountRepo) Update(ctx context.Context, req *request.BackupAccountUpdate) error { +func (_m *BackupAccountRepo) Update(ctx context.Context, req *request.BackupStorageUpdate) error { ret := _m.Called(ctx, req) if len(ret) == 0 { @@ -264,7 +264,7 @@ func (_m *BackupAccountRepo) Update(ctx context.Context, req *request.BackupAcco } var r0 error - if rf, ok := ret.Get(0).(func(context.Context, *request.BackupAccountUpdate) error); ok { + if rf, ok := ret.Get(0).(func(context.Context, *request.BackupStorageUpdate) error); ok { r0 = rf(ctx, req) } else { r0 = ret.Error(0) @@ -280,14 +280,14 @@ type BackupAccountRepo_Update_Call struct { // Update is a helper method to define mock.On call // - ctx context.Context -// - req *request.BackupAccountUpdate +// - req *request.BackupStorageUpdate func (_e *BackupAccountRepo_Expecter) Update(ctx interface{}, req interface{}) *BackupAccountRepo_Update_Call { return &BackupAccountRepo_Update_Call{Call: _e.mock.On("Update", ctx, req)} } -func (_c *BackupAccountRepo_Update_Call) Run(run func(ctx context.Context, req *request.BackupAccountUpdate)) *BackupAccountRepo_Update_Call { +func (_c *BackupAccountRepo_Update_Call) Run(run func(ctx context.Context, req *request.BackupStorageUpdate)) *BackupAccountRepo_Update_Call { _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(*request.BackupAccountUpdate)) + run(args[0].(context.Context), args[1].(*request.BackupStorageUpdate)) }) return _c } @@ -297,7 +297,7 @@ func (_c *BackupAccountRepo_Update_Call) Return(_a0 error) *BackupAccountRepo_Up return _c } -func (_c *BackupAccountRepo_Update_Call) RunAndReturn(run func(context.Context, *request.BackupAccountUpdate) error) *BackupAccountRepo_Update_Call { +func (_c *BackupAccountRepo_Update_Call) RunAndReturn(run func(context.Context, *request.BackupStorageUpdate) error) *BackupAccountRepo_Update_Call { _c.Call.Return(run) return _c } diff --git a/mocks/biz/BackupRepo.go b/mocks/biz/BackupRepo.go index 395581d1..08c435ef 100644 --- a/mocks/biz/BackupRepo.go +++ b/mocks/biz/BackupRepo.go @@ -25,12 +25,12 @@ func (_m *BackupRepo) EXPECT() *BackupRepo_Expecter { return &BackupRepo_Expecter{mock: &_m.Mock} } -// ClearAccountExpired provides a mock function with given fields: account, typ, prefix, save -func (_m *BackupRepo) ClearAccountExpired(account uint, typ biz.BackupType, prefix string, save uint) error { +// ClearStorageExpired provides a mock function with given fields: account, typ, prefix, save +func (_m *BackupRepo) ClearStorageExpired(account uint, typ biz.BackupType, prefix string, save uint) error { ret := _m.Called(account, typ, prefix, save) if len(ret) == 0 { - panic("no return value specified for ClearAccountExpired") + panic("no return value specified for ClearStorageExpired") } var r0 error @@ -43,33 +43,33 @@ func (_m *BackupRepo) ClearAccountExpired(account uint, typ biz.BackupType, pref return r0 } -// BackupRepo_ClearAccountExpired_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ClearAccountExpired' -type BackupRepo_ClearAccountExpired_Call struct { +// BackupRepo_ClearStorageExpired_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ClearStorageExpired' +type BackupRepo_ClearStorageExpired_Call struct { *mock.Call } -// ClearAccountExpired is a helper method to define mock.On call +// ClearStorageExpired is a helper method to define mock.On call // - account uint // - typ biz.BackupType // - prefix string // - save uint -func (_e *BackupRepo_Expecter) ClearAccountExpired(account interface{}, typ interface{}, prefix interface{}, save interface{}) *BackupRepo_ClearAccountExpired_Call { - return &BackupRepo_ClearAccountExpired_Call{Call: _e.mock.On("ClearAccountExpired", account, typ, prefix, save)} +func (_e *BackupRepo_Expecter) ClearStorageExpired(account interface{}, typ interface{}, prefix interface{}, save interface{}) *BackupRepo_ClearStorageExpired_Call { + return &BackupRepo_ClearStorageExpired_Call{Call: _e.mock.On("ClearStorageExpired", account, typ, prefix, save)} } -func (_c *BackupRepo_ClearAccountExpired_Call) Run(run func(account uint, typ biz.BackupType, prefix string, save uint)) *BackupRepo_ClearAccountExpired_Call { +func (_c *BackupRepo_ClearStorageExpired_Call) Run(run func(account uint, typ biz.BackupType, prefix string, save uint)) *BackupRepo_ClearStorageExpired_Call { _c.Call.Run(func(args mock.Arguments) { run(args[0].(uint), args[1].(biz.BackupType), args[2].(string), args[3].(uint)) }) return _c } -func (_c *BackupRepo_ClearAccountExpired_Call) Return(_a0 error) *BackupRepo_ClearAccountExpired_Call { +func (_c *BackupRepo_ClearStorageExpired_Call) Return(_a0 error) *BackupRepo_ClearStorageExpired_Call { _c.Call.Return(_a0) return _c } -func (_c *BackupRepo_ClearAccountExpired_Call) RunAndReturn(run func(uint, biz.BackupType, string, uint) error) *BackupRepo_ClearAccountExpired_Call { +func (_c *BackupRepo_ClearStorageExpired_Call) RunAndReturn(run func(uint, biz.BackupType, string, uint) error) *BackupRepo_ClearStorageExpired_Call { _c.Call.Return(run) return _c } diff --git a/pkg/types/backup.go b/pkg/types/backup.go index a6b0721f..30c0881d 100644 --- a/pkg/types/backup.go +++ b/pkg/types/backup.go @@ -2,7 +2,7 @@ package types import "time" -type BackupAccountInfo struct { +type BackupStorageInfo struct { // S3 AccessKey string `json:"access_key"` // 访问密钥 SecretKey string `json:"secret_key"` // 私钥 diff --git a/web/src/api/panel/backup-storage/index.ts b/web/src/api/panel/backup-storage/index.ts new file mode 100644 index 00000000..2bb6eb19 --- /dev/null +++ b/web/src/api/panel/backup-storage/index.ts @@ -0,0 +1,15 @@ +import { http } from '@/utils' + +export default { + // 获取备份账号列表 + list: (page: number, limit: number): any => + http.Get('/backup_storage', { params: { page, limit } }), + // 获取备份账号 + get: (id: number): any => http.Get(`/backup_storage/${id}`), + // 创建备份账号 + create: (data: any): any => http.Post('/backup_storage', data), + // 更新备份账号 + update: (id: number, data: any): any => http.Put(`/backup_storage/${id}`, data), + // 删除备份账号 + delete: (id: number): any => http.Delete(`/backup_storage/${id}`) +} diff --git a/web/src/api/panel/backup/index.ts b/web/src/api/panel/backup/index.ts index 29664645..5e55d4b8 100644 --- a/web/src/api/panel/backup/index.ts +++ b/web/src/api/panel/backup/index.ts @@ -5,8 +5,8 @@ export default { list: (type: string, page: number, limit: number): any => http.Get(`/backup/${type}`, { params: { page, limit } }), // 创建备份 - create: (type: string, target: string, account_id: number): any => - http.Post(`/backup/${type}`, { target, account_id }), + create: (type: string, target: string, storage: number): any => + http.Post(`/backup/${type}`, { target, storage }), // 上传备份 upload: (type: string, formData: FormData): any => http.Post(`/backup/${type}/upload`, formData), // 删除备份 diff --git a/web/src/api/panel/backupAccount/index.ts b/web/src/api/panel/backupAccount/index.ts deleted file mode 100644 index b93289f1..00000000 --- a/web/src/api/panel/backupAccount/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { http } from '@/utils' - -export default { - // 获取备份账号列表 - list: (page: number, limit: number): any => - http.Get('/backup_account', { params: { page, limit } }), - // 获取备份账号 - get: (id: number): any => http.Get(`/backup_account/${id}`), - // 创建备份账号 - create: (data: any): any => http.Post('/backup_account', data), - // 更新备份账号 - update: (id: number, data: any): any => http.Put(`/backup_account/${id}`, data), - // 删除备份账号 - delete: (id: number): any => http.Delete(`/backup_account/${id}`) -} diff --git a/web/src/views/backup/IndexView.vue b/web/src/views/backup/IndexView.vue index a761ca5b..d781aecd 100644 --- a/web/src/views/backup/IndexView.vue +++ b/web/src/views/backup/IndexView.vue @@ -5,7 +5,7 @@ defineOptions({ import home from '@/api/panel/home' import ListView from '@/views/backup/ListView.vue' -import AccountView from '@/views/backup/AccountView.vue' +import StorageView from '@/views/backup/StorageView.vue' import { useGettext } from 'vue3-gettext' const { $gettext } = useGettext() @@ -38,10 +38,10 @@ const postgreSQLInstalled = computed(() => { - + - - + + diff --git a/web/src/views/backup/ListView.vue b/web/src/views/backup/ListView.vue index 532472bc..66414836 100644 --- a/web/src/views/backup/ListView.vue +++ b/web/src/views/backup/ListView.vue @@ -1,6 +1,6 @@ @@ -178,15 +180,15 @@ onMounted(() => { > - + - +