refactor(workflows): flip association of edges

This commit is contained in:
Gregor Kleen 2020-10-02 15:14:27 +02:00
parent c5eea64b27
commit 54e1d6bb9d
2 changed files with 8 additions and 8 deletions

View File

@ -38,7 +38,4 @@ WorkflowWorkflow
instance WorkflowInstanceId Maybe
scope (WorkflowScope TermIdentifier SchoolShorthand SqlBackendKey) -- TermId, SchoolId, CourseId
graph (WorkflowGraph FileReference SqlBackendKey) -- UserId
initUser UserId Maybe
initTime UTCTime
state (WorkflowState FileReference SqlBackendKey) -- UserId
currentNode WorkflowGraphNodeLabel

View File

@ -51,7 +51,6 @@ newtype WorkflowGraphNodeLabel = WorkflowGraphNodeLabel { unWorkflowGraphNodeLab
data WorkflowGraphNode fileid userid = WGN
{ wgnDisplayLabel :: Maybe I18nText
, wgnInitial :: Maybe (NonNull (Set (WorkflowRole userid)))
, wgnFinal :: Bool
, wgnViewers :: Set (WorkflowRole userid)
, wgnEdges :: Map WorkflowGraphEdgeLabel (WorkflowGraphEdge fileid userid)
@ -67,7 +66,7 @@ newtype WorkflowGraphEdgeLabel = WorkflowGraphEdgeLabel { unWorkflowGraphEdgeLab
data WorkflowGraphEdge fileid userid
= WorkflowGraphEdgeManual
{ wgeTarget :: WorkflowGraphNodeLabel
{ wgeSource :: WorkflowGraphNodeLabel
, wgeActors :: Set (WorkflowRole userid)
, wgeForm :: Map WorkflowPayloadLabel (NonNull (Set (WorkflowPayloadSpec fileid userid)))
-- ^ field requirement forms a cnf:
@ -79,7 +78,11 @@ data WorkflowGraphEdge fileid userid
-- since fields can reference other labels this allows arbitrary requirements to be encoded.
}
| WorkflowGraphEdgeAutomatic
{ wgeTarget :: WorkflowGraphNodeLabel
{ wgeSource :: WorkflowGraphNodeLabel
}
| WorkflowGraphEdgeInitial
{ wgeActors :: Set (WorkflowRole userid)
, wgeForm :: Map WorkflowPayloadLabel (NonNull (Set (WorkflowPayloadSpec fileid userid)))
}
deriving (Eq, Ord, Show, Generic, Typeable)
@ -202,10 +205,10 @@ newtype WorkflowPayloadLabel = WorkflowPayloadLabel { unWorkflowPayloadLabel ::
deriving stock (Eq, Ord, Show, Read, Data, Generic, Typeable)
deriving newtype (IsString, ToJSON, ToJSONKey, FromJSON, FromJSONKey, PersistField, PersistFieldSql)
type WorkflowState fileid userid = Seq (WorkflowAction fileid userid)
type WorkflowState fileid userid = NonNull (Seq (WorkflowAction fileid userid))
data WorkflowAction fileid userid = WorkflowAction
{ wpFrom :: WorkflowGraphNodeLabel
{ wpTo :: WorkflowGraphNodeLabel
, wpVia :: WorkflowGraphEdgeLabel
, wpPayload :: Map WorkflowPayloadLabel (NonNull (Set (WorkflowFieldPayloadW fileid userid)))
, wpUser :: Maybe (Maybe userid) -- ^ Outer `Maybe` encodes automatic/manual, inner `Maybe` encodes whether user was authenticated