refactor: base.repo与app重构优化

This commit is contained in:
meilin.huang
2024-05-05 14:53:30 +08:00
parent 4ed892a656
commit 78957a8ebd
75 changed files with 544 additions and 512 deletions

View File

@@ -48,6 +48,7 @@ type dbAppImpl struct {
dbSqlRepo repository.DbSql `inject:"DbSqlRepo"`
dbInstanceApp Instance `inject:"DbInstanceApp"`
dbSqlExecApp DbSqlExec `inject:"DbSqlExecApp"`
tagApp tagapp.TagTree `inject:"TagTreeApp"`
resourceAuthCertApp tagapp.ResourceAuthCert `inject:"ResourceAuthCertApp"`
}
@@ -103,7 +104,7 @@ func (d *dbAppImpl) SaveDb(ctx context.Context, dbEntity *entity.Db) error {
}
dbId := dbEntity.Id
old, err := d.GetById(new(entity.Db), dbId)
old, err := d.GetById(dbId)
if err != nil {
return errorx.NewBiz("该数据库不存在")
}
@@ -142,7 +143,7 @@ func (d *dbAppImpl) SaveDb(ctx context.Context, dbEntity *entity.Db) error {
}
func (d *dbAppImpl) Delete(ctx context.Context, id uint64) error {
db, err := d.GetById(new(entity.Db), id)
db, err := d.GetById(id)
if err != nil {
return errorx.NewBiz("该数据库不存在")
}
@@ -159,6 +160,8 @@ func (d *dbAppImpl) Delete(ctx context.Context, id uint64) error {
func(ctx context.Context) error {
// 删除该库下用户保存的所有sql信息
return d.dbSqlRepo.DeleteByCond(ctx, &entity.DbSql{DbId: id})
}, func(ctx context.Context) error {
return d.dbSqlExecApp.DeleteBy(ctx, &entity.DbSqlExec{DbId: id})
}, func(ctx context.Context) error {
return d.tagApp.DeleteTagByParam(ctx, &tagapp.DelResourceTagParam{
ResourceCode: db.Code,
@@ -169,12 +172,12 @@ func (d *dbAppImpl) Delete(ctx context.Context, id uint64) error {
func (d *dbAppImpl) GetDbConn(dbId uint64, dbName string) (*dbi.DbConn, error) {
return dbm.GetDbConn(dbId, dbName, func() (*dbi.DbInfo, error) {
db, err := d.GetById(new(entity.Db), dbId)
db, err := d.GetById(dbId)
if err != nil {
return nil, errorx.NewBiz("数据库信息不存在")
}
instance, err := d.dbInstanceApp.GetById(new(entity.DbInstance), db.InstanceId)
instance, err := d.dbInstanceApp.GetById(db.InstanceId)
if err != nil {
return nil, errorx.NewBiz("数据库实例不存在")
}
@@ -205,9 +208,8 @@ func (d *dbAppImpl) GetDbConnByInstanceId(instanceId uint64) (*dbi.DbConn, error
return conn, nil
}
var dbs []*entity.Db
if err := d.ListByCond(model.NewModelCond(&entity.Db{InstanceId: instanceId}).Columns("id", "database"), &dbs); err != nil {
dbs, err := d.ListByCond(&entity.Db{InstanceId: instanceId}, "id", "database")
if err != nil {
return nil, errorx.NewBiz("获取数据库列表失败")
}
if len(dbs) == 0 {

View File

@@ -63,21 +63,18 @@ func (app *DbBackupApp) Init() error {
}
func (app *DbBackupApp) prune(ctx context.Context) error {
var jobs []*entity.DbBackup
if err := app.backupRepo.ListByCond(map[string]any{}, &jobs); err != nil {
jobs, err := app.backupRepo.SelectByCond(map[string]any{})
if err != nil {
return err
}
for _, job := range jobs {
if ctx.Err() != nil {
return nil
}
var histories []*entity.DbBackupHistory
historyCond := map[string]any{
"db_backup_id": job.Id,
}
if err := app.backupHistoryRepo.SelectByCond(historyCond, &histories); err != nil {
return err
}
histories, _ := app.backupHistoryRepo.SelectByCond(historyCond)
expiringTime := time.Now().Add(-math.MaxInt64)
if job.MaxSaveDays > 0 {
expiringTime = time.Now().Add(-time.Hour * 24 * time.Duration(job.MaxSaveDays+1))
@@ -160,8 +157,8 @@ func (app *DbBackupApp) Enable(ctx context.Context, jobId uint64) error {
defer app.mutex.Unlock()
repo := app.backupRepo
job := &entity.DbBackup{}
if err := repo.GetById(job, jobId); err != nil {
job, err := repo.GetById(jobId)
if err != nil {
return err
}
if job.IsEnabled() {
@@ -183,8 +180,8 @@ func (app *DbBackupApp) Disable(ctx context.Context, jobId uint64) error {
defer app.mutex.Unlock()
repo := app.backupRepo
job := &entity.DbBackup{}
if err := repo.GetById(job, jobId); err != nil {
job, err := repo.GetById(jobId)
if err != nil {
return err
}
if !job.IsEnabled() {
@@ -202,8 +199,8 @@ func (app *DbBackupApp) StartNow(ctx context.Context, jobId uint64) error {
app.mutex.Lock()
defer app.mutex.Unlock()
job := &entity.DbBackup{}
if err := app.backupRepo.GetById(job, jobId); err != nil {
job, err := app.backupRepo.GetById(jobId)
if err != nil {
return err
}
if !job.IsEnabled() {
@@ -267,8 +264,8 @@ func (app *DbBackupApp) DeleteHistory(ctx context.Context, historyId uint64) (re
if !ok {
return errRestoringBackupHistory
}
job := &entity.DbBackupHistory{}
if err := app.backupHistoryRepo.GetById(job, historyId); err != nil {
job, err := app.backupHistoryRepo.GetById(historyId)
if err != nil {
return err
}
conn, err := app.dbApp.GetDbConnByInstanceId(job.DbInstanceId)

View File

@@ -75,8 +75,8 @@ func (app *DbBinlogApp) fetchBinlog(ctx context.Context) error {
}
func (app *DbBinlogApp) pruneBinlog(ctx context.Context) error {
var jobs []*entity.DbBinlog
if err := app.binlogRepo.SelectByCond(map[string]any{}, &jobs); err != nil {
jobs, err := app.binlogRepo.SelectByCond(map[string]any{})
if err != nil {
logx.Error("DbBinlogApp: 获取 BINLOG 同步任务失败: ", err.Error())
return err
}

View File

@@ -78,7 +78,7 @@ func (app *dataSyncAppImpl) Save(ctx context.Context, taskEntity *entity.DataSyn
return err
}
task, err := app.GetById(new(entity.DataSyncTask), taskEntity.Id)
task, err := app.GetById(taskEntity.Id)
if err != nil {
return err
}
@@ -112,7 +112,7 @@ func (app *dataSyncAppImpl) AddCronJob(ctx context.Context, taskEntity *entity.D
}
func (app *dataSyncAppImpl) RemoveCronJobById(taskId uint64) {
task, err := app.GetById(new(entity.DataSyncTask), taskId)
task, err := app.GetById(taskId)
if err == nil {
scheduler.RemoveByKey(task.TaskKey)
}
@@ -127,7 +127,7 @@ func (app *dataSyncAppImpl) changeRunningState(id uint64, state int8) {
func (app *dataSyncAppImpl) RunCronJob(ctx context.Context, id uint64) error {
// 查询最新的任务信息
task, err := app.GetById(new(entity.DataSyncTask), id)
task, err := app.GetById(id)
if err != nil {
return errorx.NewBiz("任务不存在")
}
@@ -369,7 +369,7 @@ func (app *dataSyncAppImpl) srcData2TargetDb(srcRes []map[string]any, fieldMap [
}
// 运行过程中,判断状态是否为已关闭,是则结束运行,否则继续运行
taskParam, _ := app.GetById(new(entity.DataSyncTask), task.Id)
taskParam, _ := app.GetById(task.Id)
if taskParam.RunningState == entity.DataSyncTaskRunStateStop {
return errorx.NewBiz("该任务已被手动终止")
}

View File

@@ -142,7 +142,7 @@ func (app *instanceAppImpl) SaveDbInstance(ctx context.Context, instance *SaveDb
}
} else {
// 根据host等未查到旧数据则需要根据id重新获取因为后续需要使用到code
oldInstance, err = app.GetById(new(entity.DbInstance), instanceEntity.Id)
oldInstance, err = app.GetById(instanceEntity.Id)
if err != nil {
return 0, errorx.NewBiz("该数据库实例不存在")
}
@@ -170,7 +170,7 @@ func (app *instanceAppImpl) SaveDbInstance(ctx context.Context, instance *SaveDb
}
func (app *instanceAppImpl) Delete(ctx context.Context, instanceId uint64) error {
instance, err := app.GetById(new(entity.DbInstance), instanceId, "name")
instance, err := app.GetById(instanceId, "name")
if err != nil {
return errorx.NewBiz("获取数据库实例错误数据库实例ID为: %d", instance.Id)
}
@@ -201,18 +201,9 @@ func (app *instanceAppImpl) Delete(ctx context.Context, instanceId uint64) error
biz.ErrIsNil(err, "删除数据库实例失败: %v", err)
}
db := &entity.Db{
dbs, _ := app.dbApp.ListByCond(&entity.Db{
InstanceId: instanceId,
}
err = app.dbApp.GetByCond(db)
switch {
case err == nil:
biz.ErrNotNil(err, "不能删除数据库实例【%s】请先删除关联的数据库资源。", instance.Name)
case errors.Is(err, gorm.ErrRecordNotFound):
break
default:
biz.ErrIsNil(err, "删除数据库实例失败: %v", err)
}
})
return app.Tx(ctx, func(ctx context.Context) error {
return app.DeleteById(ctx, instanceId)
@@ -227,6 +218,14 @@ func (app *instanceAppImpl) Delete(ctx context.Context, instanceId uint64) error
ResourceCode: instance.Code,
ResourceType: tagentity.TagType(consts.ResourceTypeDb),
})
}, func(ctx context.Context) error {
// 删除所有库配置
for _, db := range dbs {
if err := app.dbApp.Delete(ctx, db.Id); err != nil {
return err
}
}
return nil
})
}
@@ -285,10 +284,10 @@ func (m *instanceAppImpl) genDbInstanceResourceTag(me *entity.DbInstance, authCe
}
})
var dbs []*entity.Db
if err := m.dbApp.ListByCond(&entity.Db{
dbs, err := m.dbApp.ListByCond(&entity.Db{
InstanceId: me.Id,
}, &dbs); err != nil {
})
if err != nil {
logx.Errorf("获取实例关联的数据库失败: %v", err)
}

View File

@@ -78,8 +78,8 @@ func (app *DbRestoreApp) Enable(ctx context.Context, jobId uint64) error {
defer app.mutex.Unlock()
repo := app.restoreRepo
job := &entity.DbRestore{}
if err := repo.GetById(job, jobId); err != nil {
job, err := repo.GetById(jobId)
if err != nil {
return err
}
if job.IsEnabled() {
@@ -101,8 +101,8 @@ func (app *DbRestoreApp) Disable(ctx context.Context, jobId uint64) error {
defer app.mutex.Unlock()
repo := app.restoreRepo
job := &entity.DbRestore{}
if err := repo.GetById(job, jobId); err != nil {
job, err := repo.GetById(jobId)
if err != nil {
return err
}
if !job.IsEnabled() {

View File

@@ -4,8 +4,6 @@ import (
"context"
"errors"
"fmt"
"golang.org/x/sync/singleflight"
"gorm.io/gorm"
"mayfly-go/internal/db/dbm/dbi"
"mayfly-go/internal/db/domain/entity"
"mayfly-go/internal/db/domain/repository"
@@ -14,6 +12,9 @@ import (
"strconv"
"sync"
"time"
"golang.org/x/sync/singleflight"
"gorm.io/gorm"
)
const (
@@ -173,8 +174,8 @@ func (s *dbScheduler) restore(ctx context.Context, dbProgram dbi.DbProgram, rest
return err
}
} else {
backupHistory := &entity.DbBackupHistory{}
if err := s.backupHistoryRepo.GetById(backupHistory, restore.DbBackupHistoryId); err != nil {
backupHistory, err := s.backupHistoryRepo.GetById(restore.DbBackupHistoryId)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
err = errors.New("备份历史已删除")
}

View File

@@ -56,7 +56,7 @@ type DbSqlExec interface {
Exec(ctx context.Context, execSqlReq *DbSqlExecReq) (*DbSqlExecRes, error)
// 根据条件删除sql执行记录
DeleteBy(ctx context.Context, condition *entity.DbSqlExec)
DeleteBy(ctx context.Context, condition *entity.DbSqlExec) error
// 分页获取
GetPageList(condition *entity.DbSqlExecQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error)
@@ -196,8 +196,8 @@ func (d *dbSqlExecAppImpl) FlowBizHandle(ctx context.Context, bizHandleParam *fl
return d.dbSqlExecRepo.UpdateById(ctx, dbSqlExec)
}
func (d *dbSqlExecAppImpl) DeleteBy(ctx context.Context, condition *entity.DbSqlExec) {
d.dbSqlExecRepo.DeleteByCond(ctx, condition)
func (d *dbSqlExecAppImpl) DeleteBy(ctx context.Context, condition *entity.DbSqlExec) error {
return d.dbSqlExecRepo.DeleteByCond(ctx, condition)
}
func (d *dbSqlExecAppImpl) GetPageList(condition *entity.DbSqlExecQuery, pageParam *model.PageParam, toEntity any, orderBy ...string) (*model.PageResult[any], error) {

View File

@@ -87,7 +87,7 @@ func (app *dbTransferAppImpl) CreateLog(ctx context.Context, taskId uint64) (uin
}
func (app *dbTransferAppImpl) Run(ctx context.Context, taskId uint64, logId uint64) {
task, err := app.GetById(new(entity.DbTransferTask), taskId)
task, err := app.GetById(taskId)
if err != nil {
logx.Errorf("创建DBMS-执行数据迁移日志失败:%v", err)
return
@@ -150,7 +150,7 @@ func (app *dbTransferAppImpl) Run(ctx context.Context, taskId uint64, logId uint
}
func (app *dbTransferAppImpl) Stop(ctx context.Context, taskId uint64) error {
task, err := app.GetById(new(entity.DbTransferTask), taskId)
task, err := app.GetById(taskId)
if err != nil {
return errorx.NewBiz("任务不存在")
}