2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 11:27:17 +08:00
Files
panel/internal/data/backup_account.go
2026-01-22 02:45:03 +08:00

111 lines
3.0 KiB
Go

package data
import (
"context"
"log/slog"
"github.com/acepanel/panel/pkg/types"
"github.com/leonelquinteros/gotext"
"gorm.io/gorm"
"github.com/acepanel/panel/internal/biz"
"github.com/acepanel/panel/internal/http/request"
)
type backupAccountRepo struct {
t *gotext.Locale
db *gorm.DB
log *slog.Logger
setting biz.SettingRepo
}
func NewBackupAccountRepo(t *gotext.Locale, db *gorm.DB, log *slog.Logger, setting biz.SettingRepo) biz.BackupAccountRepo {
return &backupAccountRepo{
t: t,
db: db,
log: log,
setting: setting,
}
}
func (r backupAccountRepo) List(page, limit uint) ([]*biz.BackupAccount, int64, error) {
// 本地存储
path, err := r.setting.Get(biz.SettingKeyBackupPath)
if err != nil {
return nil, 0, err
}
localStorage := &biz.BackupAccount{
ID: 0,
Type: biz.BackupAccountTypeLocal,
Name: r.t.Get("Local Storage"),
Info: types.BackupAccountInfo{
Path: path,
},
}
var dbAccounts []*biz.BackupAccount
var total int64
if err = r.db.Model(&biz.BackupAccount{}).Order("id desc").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)
if page == 1 {
accounts = append(accounts, localStorage)
}
accounts = append(accounts, dbAccounts...)
return accounts, total + 1, nil
}
func (r backupAccountRepo) Get(id uint) (*biz.BackupAccount, error) {
account := new(biz.BackupAccount)
err := r.db.Model(&biz.BackupAccount{}).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),
Name: req.Name,
Info: req.Info,
}
if err := r.db.Create(account).Error; err != nil {
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))
return account, nil
}
func (r backupAccountRepo) Update(ctx context.Context, req *request.BackupAccountUpdate) error {
account, err := r.Get(req.ID)
if err != nil {
return err
}
account.Type = biz.BackupAccountType(req.Type)
account.Name = req.Name
account.Info = req.Info
if err = r.db.Save(account).Error; err != nil {
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))
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 {
return err
}
r.log.Info("backup account deleted", slog.String("type", biz.OperationTypeBackup), slog.Uint64("operator_id", getOperatorID(ctx)), slog.Uint64("id", uint64(id)))
return nil
}