package server import ( "context" "chat-agent-system/internal/docgov" "chat-agent-system/internal/events" "chat-agent-system/internal/notification" ) func (s *Server) registerWorkflowApprovalHook() { // Durable workflow_advance is the unique writer. Keep the method for one // rollback window; do not register AddOnApprovedHook in production. return } func (s *Server) onWorkflowDocumentApproved(ctx context.Context, doc *docgov.DocumentRecord) { if s.rt != nil && s.rt.WriterLive(ctx, events.ConsumerWorkflowAdvance) { return } if doc == nil || doc.TaskKey == "" || doc.ProjectID <= 0 || s.instSvc() == nil { return } result, err := s.instSvc().HandleDocumentApproved(ctx, doc.ProjectID, doc.TaskKey) if err != nil || result == nil || !result.StageReady { return } if s.notifySvc() == nil || !s.notifySvc().Available() { return } project, err := s.pwSvc().GetProject(ctx, doc.ProjectID, 0) if err != nil || project == nil || project.CreatorUserID <= 0 { return } _, _ = s.notifySvc().EmitStageReadyToAdvance(ctx, project.CreatorUserID, notification.StageReadyPayload{ ProjectID: doc.ProjectID, WorkflowInstanceID: result.InstanceID, StageInstanceID: result.StageInstanceID, StageKey: result.StageKey, StageName: result.StageName, ConfigRevision: result.ConfigRevision, RequiredDocCount: result.RequiredDocCount, ApprovedDocCount: result.ApprovedDocCount, }) }