refactor(workflows): refine model and types; TODO fix instances

This commit is contained in:
Sarah Vaupel 2020-04-22 18:22:24 +02:00 committed by Gregor Kleen
parent 88b995a7fd
commit 386d3bfc49
2 changed files with 27 additions and 16 deletions

View File

@ -1,11 +1,16 @@
WorkflowDefinition WorkflowDefinition
graph WorkflowGraph graph WorkflowGraph
scope WorkflowInstanceScope' scope WorkflowInstanceScope'
name (CI Text)
UniqueWorkflowDefinition name scope
WorkflowInstance WorkflowInstance
definition WorkflowDefinition definition WorkflowDefinition
graph WorkflowGraph graph (WorkflowGraph Int64 Int64) -- FileId, UserId
scope WorkflowInstanceScope scope (WorkflowInstanceScope Int64 Int64 Int64) -- TermId, SchoolId, CourseId
name (CI Text)
category (CI Text) Maybe
UniqueWorkflowInstance name scope
WorkflowWorkflow WorkflowWorkflow
instance WorkflowInstance instance WorkflowInstance

View File

@ -27,12 +27,14 @@ import Data.Aeson.Types (Parser)
-- TODO remove -- TODO remove
--import Data.ByteString.Lazy.Internal (ByteString) --import Data.ByteString.Lazy.Internal (ByteString)
-- TODO: label type to newtype
----- WORKFLOW GRAPH ----- ----- WORKFLOW GRAPH -----
data WorkflowGraph fileid userid = WorkflowGraph 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) deriving (Show, Eq)
@ -40,11 +42,14 @@ data WorkflowGraph fileid userid = WorkflowGraph
----- WORKFLOW GRAPH: NODES ----- ----- WORKFLOW GRAPH: NODES -----
type WorkflowGraphNodeLabel = CI Text type WorkflowGraphNodeLabel = CI Text
type WorkflowGraphEdgeLabel = CI Text
data WorkflowGraphNode fileid userid = WGN data WorkflowGraphNode fileid userid = WGN
{ wgnDisplayLabel :: Maybe Text { wgnDisplayLabel :: Maybe Text
, wgnInitial :: Bool
, wgnFinished :: Bool , wgnFinished :: Bool
, wgnEdges :: Set (WorkflowGraphEdge fileid userid) , wgnViewers :: Set WorkflowRole
, wgnEdges :: Map WorkflowGraphEdgeLabel (WorkflowGraphEdge fileid userid)
} }
deriving (Eq, Ord, Show, Generic, Typeable) deriving (Eq, Ord, Show, Generic, Typeable)
@ -52,9 +57,10 @@ data WorkflowGraphNode fileid userid = WGN
----- WORKFLOW GRAPH: EDGES ----- ----- WORKFLOW GRAPH: EDGES -----
data WorkflowGraphEdge fileid userid = WGE data WorkflowGraphEdge fileid userid = WGE
{ wgeTarget :: WorkflowGraphNodeLabel { wgeTarget :: WorkflowGraphNodeLabel
, wgeActors :: Set (WorkflowRole userid) , wgeAutomatic :: Bool
, wgeForm :: Map WorkflowPayloadLabel (NonNull (Set (WorkflowPayloadSpec fileid userid))) , wgeActors :: Set (WorkflowRole userid)
, wgeForm :: NonNull (Map WorkflowPayloadLabel (WorkflowPayloadSpec fileid userid))
} }
deriving Show deriving Show
@ -81,16 +87,16 @@ data WorkflowPayloadSpec fileid userid = forall payload. WorkflowPayloadSpec (Wo
instance (Show fileid, Show userid) => Show (WorkflowPayloadSpec fileid userid) where instance (Show fileid, Show userid) => Show (WorkflowPayloadSpec fileid userid) where
show (WorkflowPayloadSpec payloadField) = show payloadField show (WorkflowPayloadSpec payloadField) = show payloadField
type WorkflowPayloadFieldLabel = Text type WorkflowPayloadFieldLabel = CI Text
data WorkflowPayloadField fileid userid (payload :: Type) where data WorkflowPayloadField fileid userid (payload :: Type) where
WorkflowPayloadFieldText :: { wpftLabel :: WorkflowPayloadFieldLabel WorkflowPayloadFieldText :: { wpftLabel :: Text
, wpftPlaceholder :: Text , wpftPlaceholder :: Text
, wpftTooltip :: Maybe Text , wpftTooltip :: Maybe Text
, wpftDefault :: Maybe Text , wpftDefault :: Maybe Text
, wpftOptional :: Maybe Bool , wpftOptional :: Maybe Bool
} -> WorkflowPayloadField fileid userid Text } -> WorkflowPayloadField fileid userid Text
WorkflowPayloadFieldNumber :: { wpfnLabel :: WorkflowPayloadFieldLabel WorkflowPayloadFieldNumber :: { wpfnLabel :: Text
, wpfnPlaceholder :: Text , wpfnPlaceholder :: Text
, wpfnTooltip :: Maybe Text , wpfnTooltip :: Maybe Text
, wpfnDefault :: Maybe Scientific , wpfnDefault :: Maybe Scientific
@ -99,16 +105,16 @@ data WorkflowPayloadField fileid userid (payload :: Type) where
, wpfnStep :: Scientific , wpfnStep :: Scientific
, wpfnOptional :: Maybe Bool , wpfnOptional :: Maybe Bool
} -> WorkflowPayloadField fileid userid Scientific } -> WorkflowPayloadField fileid userid Scientific
WorkflowPayloadFieldBool :: { wpfbLabel :: WorkflowPayloadFieldLabel WorkflowPayloadFieldBool :: { wpfbLabel :: Text
, wpfbTooltip :: Maybe Text , wpfbTooltip :: Maybe Text
, wpfbDefault :: Maybe Bool , wpfbDefault :: Maybe Bool
} -> WorkflowPayloadField fileid userid Bool } -> WorkflowPayloadField fileid userid Bool
WorkflowPayloadFieldFile :: { wpffLabel :: WorkflowPayloadFieldLabel WorkflowPayloadFieldFile :: { wpffLabel :: Text
, wpffTooltip :: Maybe Text , wpffTooltip :: Maybe Text
, wpffDefault :: Maybe fileid , wpffDefault :: Maybe fileid
, wpffOptional :: Maybe Bool , wpffOptional :: Maybe Bool
} -> WorkflowPayloadField fileid userid FileInfo } -> WorkflowPayloadField fileid userid FileInfo
WorkflowPayloadFieldUser :: { wpfuLabel :: WorkflowPayloadFieldLabel WorkflowPayloadFieldUser :: { wpfuLabel :: Text
, wpfuTooltip :: Maybe Text , wpfuTooltip :: Maybe Text
, wpfuDefault :: Maybe userid , wpfuDefault :: Maybe userid
, wpfuOptional :: Maybe Bool , wpfuOptional :: Maybe Bool
@ -191,9 +197,9 @@ type WorkflowPayloadLabel = CI Text
type WorkflowPayload fileid userid = Map WorkflowPayloadLabel (Seq (WorkflowPayload' fileid userid)) type WorkflowPayload fileid userid = Map WorkflowPayloadLabel (Seq (WorkflowPayload' fileid userid))
data WorkflowPayload' = WorkflowPayload' data WorkflowPayload' fileid userid = WorkflowPayload'
{ wpPayload :: Map WorkflowPayloadFieldLabel WorkflowFieldPayload { wpPayload :: Map WorkflowGraphNodeLabel (Map WorkflowGraphEdgeLabel (Map WorkflowPayloadFieldLabel (WorkflowFieldPayloadW fileid userid)))
, wpActor :: Maybe Int64 -- UserId , wpActor :: Maybe userid
, wpActionTime :: UTCTime , wpActionTime :: UTCTime
} }
deriving Show deriving Show