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