package system import ( "context" "time" ) // SysAutoCodeHistory 自动代码生成历史 type SysAutoCodeHistory struct { ID uint `json:"ID" gorm:"primarykey"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` Table string `json:"tableName" gorm:"column:table_name;comment:表名"` Package string `json:"package" gorm:"column:package;comment:模块名/插件名"` Request string `json:"request" gorm:"type:text;column:request;comment:前端传入的结构化信息"` StructName string `json:"structName" gorm:"column:struct_name;comment:结构体名称"` Abbreviation string `json:"abbreviation" gorm:"column:abbreviation;comment:结构体名称缩写"` BusinessDB string `json:"businessDb" gorm:"column:business_db;comment:业务库"` Description string `json:"description" gorm:"column:description;comment:Struct中文名称"` Templates map[string]string `json:"template" gorm:"serializer:json;type:text;column:templates;comment:模板信息"` Injections map[string]string `json:"injections" gorm:"serializer:json;type:text;column:Injections;comment:注入路径"` Flag int `json:"flag" gorm:"column:flag;comment:[0:创建,1:回滚]"` ApiIDs []uint `json:"apiIDs" gorm:"serializer:json;column:api_ids;comment:api表注册内容"` MenuID uint `json:"menuId" gorm:"column:menu_id;comment:菜单ID"` ExportTemplateID uint `json:"exportTemplateID" gorm:"column:export_template_id;comment:导出模板ID"` PackageID uint `json:"packageID" gorm:"column:package_id;comment:包ID"` } func (SysAutoCodeHistory) TableName() string { return "sys_auto_code_histories" } // AutoCodeHistorySearchReq 历史搜索请求 type AutoCodeHistorySearchReq struct { Page int `json:"page" form:"page"` PageSize int `json:"pageSize" form:"pageSize"` } // SysAutoHistoryRollBack 回滚请求 type SysAutoHistoryRollBack struct { ID uint `json:"id"` DeleteApi bool `json:"deleteApi"` DeleteMenu bool `json:"deleteMenu"` DeleteTable bool `json:"deleteTable"` } // AutoCodeHistoryRepo 自动代码历史仓储接口 type AutoCodeHistoryRepo interface { Create(ctx context.Context, history *SysAutoCodeHistory) error First(ctx context.Context, id uint) (string, error) Delete(ctx context.Context, id uint) error GetList(ctx context.Context, page, pageSize int) ([]SysAutoCodeHistory, int64, error) GetByID(ctx context.Context, id uint) (*SysAutoCodeHistory, error) UpdateFlag(ctx context.Context, id uint, flag int) error DropTable(ctx context.Context, businessDB, tableName string) error Repeat(ctx context.Context, businessDB, structName, abbreviation, pkg string) bool } // AutoCodeHistoryUsecase 自动代码历史用例 type AutoCodeHistoryUsecase struct { repo AutoCodeHistoryRepo } // NewAutoCodeHistoryUsecase 创建自动代码历史用例 func NewAutoCodeHistoryUsecase(repo AutoCodeHistoryRepo) *AutoCodeHistoryUsecase { return &AutoCodeHistoryUsecase{repo: repo} } // Create 创建历史记录 func (uc *AutoCodeHistoryUsecase) Create(ctx context.Context, history *SysAutoCodeHistory) error { return uc.repo.Create(ctx, history) } // First 根据id获取meta信息 func (uc *AutoCodeHistoryUsecase) First(ctx context.Context, id uint) (string, error) { return uc.repo.First(ctx, id) } // Repeat 检测重复 func (uc *AutoCodeHistoryUsecase) Repeat(ctx context.Context, businessDB, structName, abbreviation, pkg string) bool { return uc.repo.Repeat(ctx, businessDB, structName, abbreviation, pkg) } // Delete 删除历史记录 func (uc *AutoCodeHistoryUsecase) Delete(ctx context.Context, id uint) error { return uc.repo.Delete(ctx, id) } // GetList 获取历史记录列表 func (uc *AutoCodeHistoryUsecase) GetList(ctx context.Context, page, pageSize int) ([]SysAutoCodeHistory, int64, error) { return uc.repo.GetList(ctx, page, pageSize) } // RollBack 回滚自动生成代码 // 注意:完整的回滚功能需要AST工具支持,这里只实现基础功能 func (uc *AutoCodeHistoryUsecase) RollBack(ctx context.Context, info SysAutoHistoryRollBack) error { // 获取历史记录 history, err := uc.repo.GetByID(ctx, info.ID) if err != nil { return err } // 删除表(如果需要) if info.DeleteTable && history.Table != "" { err = uc.repo.DropTable(ctx, history.BusinessDB, history.Table) if err != nil { return err } } // 更新标记为已回滚 return uc.repo.UpdateFlag(ctx, info.ID, 1) }