refactor: enhance AI workflow management with restore version and usage tracking features

This commit is contained in:
mlogclub
2026-07-25 18:19:59 +08:00
parent 1663db7f24
commit 05eb85167c
9 changed files with 126 additions and 191 deletions
+27
View File
@@ -48,6 +48,12 @@ type AIWorkflowTemplate struct {
Definition dsl.Definition
}
type AIWorkflowUsageItem struct {
Binding models.AIAgentWorkflowBinding
Agent *models.AIAgent
Version *models.AIWorkflowVersion
}
func (s *aiWorkflowService) Get(id int64) *models.AIWorkflow {
if id <= 0 {
return nil
@@ -263,6 +269,27 @@ func (s *aiWorkflowService) DeleteWorkflow(id int64, operator *dto.AuthPrincipal
})
}
func (s *aiWorkflowService) RestoreVersion(req request.RestoreAIWorkflowVersionRequest, operator *dto.AuthPrincipal) error {
if operator == nil {
return errorsx.UnauthorizedI18n("error.auth.expired")
}
workflow := s.Get(req.WorkflowID)
version := s.GetVersion(req.WorkflowVersionID)
if workflow == nil || version == nil || version.WorkflowID != workflow.ID {
return errorsx.InvalidParamI18n("error.e0002")
}
return repositories.AIWorkflowRepository.Updates(sqls.DB(), workflow.ID, map[string]any{"draft_definition": version.Definition, "update_user_id": operator.UserID, "update_user_name": operator.Username, "updated_at": time.Now()})
}
func (s *aiWorkflowService) ListUsage(workflowID int64) []AIWorkflowUsageItem {
bindings := repositories.AIAgentWorkflowBindingRepository.FindByWorkflowID(sqls.DB(), workflowID)
ret := make([]AIWorkflowUsageItem, 0, len(bindings))
for _, binding := range bindings {
ret = append(ret, AIWorkflowUsageItem{Binding: binding, Agent: repositories.AIAgentRepository.Get(sqls.DB(), binding.AIAgentID), Version: repositories.AIWorkflowVersionRepository.Get(sqls.DB(), binding.WorkflowVersionID)})
}
return ret
}
func (s *aiWorkflowService) PublishWorkflow(req request.PublishAIWorkflowRequest, operator *dto.AuthPrincipal) (*models.AIWorkflowVersion, error) {
if operator == nil {
return nil, errorsx.UnauthorizedI18n("error.auth.expired")