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 instance WorkflowInstanceId Maybe
scope (WorkflowScope TermIdentifier SchoolShorthand SqlBackendKey) -- TermId, SchoolId, CourseId scope (WorkflowScope TermIdentifier SchoolShorthand SqlBackendKey) -- TermId, SchoolId, CourseId
graph (WorkflowGraph FileReference SqlBackendKey) -- UserId graph (WorkflowGraph FileReference SqlBackendKey) -- UserId
initUser UserId Maybe
initTime UTCTime
state (WorkflowState FileReference SqlBackendKey) -- UserId state (WorkflowState FileReference SqlBackendKey) -- UserId
currentNode WorkflowGraphNodeLabel

View File

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