3
0

Prevent duplicate workflow prompts from sending

This commit is contained in:
Tomaž Jerman
2022-04-15 16:43:16 +02:00
parent 6fd2288dfd
commit 9c00264626
3 changed files with 45 additions and 4 deletions

View File

@@ -1,8 +1,9 @@
package wfexec
import (
"github.com/cortezaproject/corteza-server/pkg/expr"
"time"
"github.com/cortezaproject/corteza-server/pkg/expr"
)
type (
@@ -16,6 +17,8 @@ type (
// state to be resumed
state *State
sent bool
// prompt reference; something client can use
// for orientation, what kind of prompt is expected
ref string
@@ -28,6 +31,8 @@ type (
StateID uint64 `json:"stateID,string"`
Payload *expr.Vars `json:"payload"`
OwnerId uint64 `json:"-"`
Original *prompted `json:"-"`
}
ResumedPrompt struct {
@@ -47,6 +52,7 @@ func (p *prompted) toPending() *PendingPrompt {
StateID: p.state.stateId,
Payload: p.payload,
OwnerId: p.ownerId,
Original: p,
}
}
@@ -56,3 +62,7 @@ func (p *prompted) toResumed() *ResumedPrompt {
OwnerId: p.ownerId,
}
}
func (p *prompted) MarkSent() {
p.sent = true
}

View File

@@ -293,9 +293,30 @@ func (s *Session) AllPendingPrompts() (out []*PendingPrompt) {
defer s.mux.RUnlock()
s.mux.RLock()
out = make([]*PendingPrompt, 0, len(s.prompted))
return s.pendingPrompts(s.prompted)
}
for _, p := range s.prompted {
// UnsentPendingPrompts returns unsent pending prompts for all user
func (s *Session) UnsentPendingPrompts() (out []*PendingPrompt) {
defer s.mux.RUnlock()
s.mux.RLock()
aux := s.pendingPrompts(s.prompted)
for _, p := range aux {
if p.Original.sent {
continue
}
out = append(out, p)
}
return
}
func (s *Session) pendingPrompts(prompted map[uint64]*prompted) (out []*PendingPrompt) {
out = make([]*PendingPrompt, 0, len(prompted))
for _, p := range prompted {
pending := p.toPending()
pending.SessionID = s.id
out = append(out, pending)