Durable notify/advance/projection are live on shared dev, so composition roots must not assign OnOutbox or AddOnApprovedHook. Bind helpers remain for tests and a rollback window. Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
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,
|
|
})
|
|
}
|