diff --git a/models/workflows.model b/models/workflows.model index 0fb55b58c..e3f258ecd 100644 --- a/models/workflows.model +++ b/models/workflows.model @@ -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 diff --git a/src/Model/Types/Workflow.hs b/src/Model/Types/Workflow.hs index 420388d70..f17d3a398 100644 --- a/src/Model/Types/Workflow.hs +++ b/src/Model/Types/Workflow.hs @@ -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