diff --git a/models/workflows.model b/models/workflows.model index e6f8b1ca0..325861bd6 100644 --- a/models/workflows.model +++ b/models/workflows.model @@ -1,11 +1,16 @@ WorkflowDefinition graph WorkflowGraph scope WorkflowInstanceScope' + name (CI Text) + UniqueWorkflowDefinition name scope WorkflowInstance definition WorkflowDefinition - graph WorkflowGraph - scope WorkflowInstanceScope + graph (WorkflowGraph Int64 Int64) -- FileId, UserId + scope (WorkflowInstanceScope Int64 Int64 Int64) -- TermId, SchoolId, CourseId + name (CI Text) + category (CI Text) Maybe + UniqueWorkflowInstance name scope WorkflowWorkflow instance WorkflowInstance diff --git a/src/Model/Types/Workflow.hs b/src/Model/Types/Workflow.hs index 51b6d12c3..12fe2806f 100644 --- a/src/Model/Types/Workflow.hs +++ b/src/Model/Types/Workflow.hs @@ -27,12 +27,14 @@ import Data.Aeson.Types (Parser) -- TODO remove --import Data.ByteString.Lazy.Internal (ByteString) +-- TODO: label type to newtype ----- WORKFLOW GRAPH ----- data WorkflowGraph fileid userid = WorkflowGraph - { wgNodes :: Map WorkflowGraphNodeLabel (WorkflowGraphNode fileid userid) + { wgNodes :: Map WorkflowGraphNodeLabel (WorkflowGraphNode fileid userid) + , wgPayloadViewers :: Map WorkflowPayloadLabel (NonNull (Set WorkflowRole)) } deriving (Show, Eq) @@ -40,11 +42,14 @@ data WorkflowGraph fileid userid = WorkflowGraph ----- WORKFLOW GRAPH: NODES ----- type WorkflowGraphNodeLabel = CI Text +type WorkflowGraphEdgeLabel = CI Text data WorkflowGraphNode fileid userid = WGN { wgnDisplayLabel :: Maybe Text + , wgnInitial :: Bool , wgnFinished :: Bool - , wgnEdges :: Set (WorkflowGraphEdge fileid userid) + , wgnViewers :: Set WorkflowRole + , wgnEdges :: Map WorkflowGraphEdgeLabel (WorkflowGraphEdge fileid userid) } deriving (Eq, Ord, Show, Generic, Typeable) @@ -52,9 +57,10 @@ data WorkflowGraphNode fileid userid = WGN ----- WORKFLOW GRAPH: EDGES ----- data WorkflowGraphEdge fileid userid = WGE - { wgeTarget :: WorkflowGraphNodeLabel - , wgeActors :: Set (WorkflowRole userid) - , wgeForm :: Map WorkflowPayloadLabel (NonNull (Set (WorkflowPayloadSpec fileid userid))) + { wgeTarget :: WorkflowGraphNodeLabel + , wgeAutomatic :: Bool + , wgeActors :: Set (WorkflowRole userid) + , wgeForm :: NonNull (Map WorkflowPayloadLabel (WorkflowPayloadSpec fileid userid)) } deriving Show @@ -81,16 +87,16 @@ data WorkflowPayloadSpec fileid userid = forall payload. WorkflowPayloadSpec (Wo instance (Show fileid, Show userid) => Show (WorkflowPayloadSpec fileid userid) where show (WorkflowPayloadSpec payloadField) = show payloadField -type WorkflowPayloadFieldLabel = Text +type WorkflowPayloadFieldLabel = CI Text data WorkflowPayloadField fileid userid (payload :: Type) where - WorkflowPayloadFieldText :: { wpftLabel :: WorkflowPayloadFieldLabel + WorkflowPayloadFieldText :: { wpftLabel :: Text , wpftPlaceholder :: Text , wpftTooltip :: Maybe Text , wpftDefault :: Maybe Text , wpftOptional :: Maybe Bool } -> WorkflowPayloadField fileid userid Text - WorkflowPayloadFieldNumber :: { wpfnLabel :: WorkflowPayloadFieldLabel + WorkflowPayloadFieldNumber :: { wpfnLabel :: Text , wpfnPlaceholder :: Text , wpfnTooltip :: Maybe Text , wpfnDefault :: Maybe Scientific @@ -99,16 +105,16 @@ data WorkflowPayloadField fileid userid (payload :: Type) where , wpfnStep :: Scientific , wpfnOptional :: Maybe Bool } -> WorkflowPayloadField fileid userid Scientific - WorkflowPayloadFieldBool :: { wpfbLabel :: WorkflowPayloadFieldLabel + WorkflowPayloadFieldBool :: { wpfbLabel :: Text , wpfbTooltip :: Maybe Text , wpfbDefault :: Maybe Bool } -> WorkflowPayloadField fileid userid Bool - WorkflowPayloadFieldFile :: { wpffLabel :: WorkflowPayloadFieldLabel + WorkflowPayloadFieldFile :: { wpffLabel :: Text , wpffTooltip :: Maybe Text , wpffDefault :: Maybe fileid , wpffOptional :: Maybe Bool } -> WorkflowPayloadField fileid userid FileInfo - WorkflowPayloadFieldUser :: { wpfuLabel :: WorkflowPayloadFieldLabel + WorkflowPayloadFieldUser :: { wpfuLabel :: Text , wpfuTooltip :: Maybe Text , wpfuDefault :: Maybe userid , wpfuOptional :: Maybe Bool @@ -191,9 +197,9 @@ type WorkflowPayloadLabel = CI Text type WorkflowPayload fileid userid = Map WorkflowPayloadLabel (Seq (WorkflowPayload' fileid userid)) -data WorkflowPayload' = WorkflowPayload' - { wpPayload :: Map WorkflowPayloadFieldLabel WorkflowFieldPayload - , wpActor :: Maybe Int64 -- UserId +data WorkflowPayload' fileid userid = WorkflowPayload' + { wpPayload :: Map WorkflowGraphNodeLabel (Map WorkflowGraphEdgeLabel (Map WorkflowPayloadFieldLabel (WorkflowFieldPayloadW fileid userid))) + , wpActor :: Maybe userid , wpActionTime :: UTCTime } deriving Show