refactor(workflows): refine model and types; TODO fix instances
This commit is contained in:
parent
88b995a7fd
commit
386d3bfc49
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user