kra/internal/data/system/auto_code_history.go

84 lines
2.6 KiB
Go

package system
import (
"context"
"kra/internal/biz/system"
"gorm.io/gorm"
)
type autoCodeHistoryRepo struct {
db *gorm.DB
}
// NewAutoCodeHistoryRepo 创建自动代码历史仓储
func NewAutoCodeHistoryRepo(db *gorm.DB) system.AutoCodeHistoryRepo {
return &autoCodeHistoryRepo{db: db}
}
// First 根据id获取meta信息
func (r *autoCodeHistoryRepo) First(ctx context.Context, id uint) (string, error) {
var meta string
err := r.db.WithContext(ctx).Model(&system.SysAutoCodeHistory{}).
Where("id = ?", id).
Pluck("request", &meta).Error
return meta, err
}
// Delete 删除历史记录
func (r *autoCodeHistoryRepo) Delete(ctx context.Context, id uint) error {
return r.db.WithContext(ctx).Where("id = ?", id).Delete(&system.SysAutoCodeHistory{}).Error
}
// GetList 获取历史记录列表
func (r *autoCodeHistoryRepo) GetList(ctx context.Context, page, pageSize int) ([]system.SysAutoCodeHistory, int64, error) {
var list []system.SysAutoCodeHistory
var total int64
db := r.db.WithContext(ctx).Model(&system.SysAutoCodeHistory{})
err := db.Count(&total).Error
if err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
err = db.Offset(offset).Limit(pageSize).Order("updated_at desc").Find(&list).Error
return list, total, err
}
// GetByID 根据ID获取历史记录
func (r *autoCodeHistoryRepo) GetByID(ctx context.Context, id uint) (*system.SysAutoCodeHistory, error) {
var history system.SysAutoCodeHistory
err := r.db.WithContext(ctx).Where("id = ?", id).First(&history).Error
return &history, err
}
// UpdateFlag 更新标记
func (r *autoCodeHistoryRepo) UpdateFlag(ctx context.Context, id uint, flag int) error {
return r.db.WithContext(ctx).Model(&system.SysAutoCodeHistory{}).
Where("id = ?", id).
Update("flag", flag).Error
}
// DropTable 删除表
func (r *autoCodeHistoryRepo) DropTable(ctx context.Context, businessDB, tableName string) error {
// 注意:这里简化处理,实际应该支持多数据库
return r.db.WithContext(ctx).Exec("DROP TABLE IF EXISTS " + tableName).Error
}
// Create 创建历史记录
func (r *autoCodeHistoryRepo) Create(ctx context.Context, history *system.SysAutoCodeHistory) error {
return r.db.WithContext(ctx).Create(history).Error
}
// Repeat 检测重复
func (r *autoCodeHistoryRepo) Repeat(ctx context.Context, businessDB, structName, abbreviation, pkg string) bool {
var count int64
r.db.WithContext(ctx).Model(&system.SysAutoCodeHistory{}).
Where("business_db = ? AND struct_name = ? AND abbreviation = ? AND package = ?",
businessDB, structName, abbreviation, pkg).
Count(&count)
return count > 0
}