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
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

View File

@ -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