refactor(workflow): more on types
This commit is contained in:
parent
5ff48d9b60
commit
0eea74b8b3
@ -1,14 +1,14 @@
|
|||||||
WorkflowDefinition
|
WorkflowDefinition
|
||||||
graph (WorkflowGraph FileId)
|
graph (WorkflowGraph UserId AuthDNF FileId)
|
||||||
initiator (WorkflowRole UserId AuthDNF)
|
scope WorkflowInstanceScope'
|
||||||
|
|
||||||
WorkflowInitiator
|
|
||||||
-- TODO descriptor of a "role" that can initiate an instance of a workflow in a specified scope
|
|
||||||
|
|
||||||
WorkflowInstance
|
WorkflowInstance
|
||||||
definition WorkflowDefinition
|
definition WorkflowDefinition
|
||||||
initiator (WorkflowRole UserId AuthDNF)
|
graph (WorkflowGraph UserId AuthDNF FileId)
|
||||||
|
scope (WorkflowInstaceScope TermId SchoolId CourseId)
|
||||||
|
|
||||||
Workflow
|
Workflow
|
||||||
instance WorkflowInstance
|
instance WorkflowInstance
|
||||||
initiator UserId
|
graph (WorkflowGraph UserId AuthDNF FileId)
|
||||||
|
initiator UserId Maybe
|
||||||
|
payload (WorkflowPayload FileId)
|
||||||
|
|||||||
@ -2,57 +2,94 @@ module Model.Types.Workflow where
|
|||||||
|
|
||||||
import Import.NoModel
|
import Import.NoModel
|
||||||
|
|
||||||
|
|
||||||
|
data WorkflowRole userid authdnf = WorkflowRoleUser userid
|
||||||
|
| WorkflowRoleAuthorized authdnf
|
||||||
|
| WorkflowRoleInitiator userid
|
||||||
|
|
||||||
|
|
||||||
data WorkflowGraphNodeStatus = WGNS
|
data WorkflowGraphNodeStatus = WGNS
|
||||||
{ wgnsIdent :: CI Text
|
{ wgnsIdent :: CI Text
|
||||||
, wgnsFinished :: Bool
|
, wgnsFinished :: Bool
|
||||||
, wgnsLabel :: Maybe Text
|
, wgnsLabel :: Maybe Text
|
||||||
}
|
}
|
||||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||||
|
|
||||||
deriveJSON defaultOptions ''WorkflowGraphNodeStatus
|
deriveJSON defaultOptions ''WorkflowGraphNodeStatus
|
||||||
data WorkflowGraphNode = WGN
|
|
||||||
{ wgnStatus :: WorkflowGraphNodeStatus
|
data WorkflowGraphNode userid authdnf fileid = WGN
|
||||||
|
{ wgnStatus :: WorkflowGraphNodeStatus
|
||||||
|
, wgnOutgoing :: Set (WorkflowGraphEdge userid authdnf fileid)
|
||||||
}
|
}
|
||||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||||
|
|
||||||
deriveJSON defaultOptions ''WorkflowGraphNode
|
deriveJSON defaultOptions ''WorkflowGraphNode
|
||||||
|
|
||||||
|
|
||||||
data WorkflowEdgePayload = WEPText Text
|
data WorkflowEdgePayload = WEPText Text
|
||||||
| WEPBool Bool
|
| WEPBool Bool
|
||||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||||
deriveJSON defaultOptions
|
|
||||||
{ constructorTagModifier = camelToPathPiece' 3
|
deriveJSON defaultOptions ''WorkflowEdgePayload
|
||||||
} ''WorkflowEdgePayload
|
|
||||||
data WorkflowEdgePayload' = WEPText' | WEPBool'
|
data WorkflowEdgePayload' = WEPText' | WEPBool'
|
||||||
deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable)
|
deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable)
|
||||||
|
|
||||||
type WorkflowEdgePayloadLabel = CI Text
|
type WorkflowEdgePayloadLabel = CI Text
|
||||||
data WorkflowGraphEdge fileid = WGE
|
|
||||||
{ wgeActors :: () -- TODO
|
|
||||||
, wgeTarget :: WorkflowGraphNode
|
data WorkflowEdgePayloadField fileid userid (payload :: *) where
|
||||||
|
WorkflowEdgePayloadFieldText :: { wepftLabel :: Text
|
||||||
|
, wepftPlaceholder :: Text
|
||||||
|
, wepftTooltip :: Maybe Text
|
||||||
|
, wepftDefault :: Maybe Text
|
||||||
|
} -> WorkflowEdgePayloadField Text fileid
|
||||||
|
WorkflowEdgePayloadFieldNumber :: HasResolution prec =>
|
||||||
|
{ wepfnLabel :: Text
|
||||||
|
, wepfnPlaceholder :: Text
|
||||||
|
, wepfnTooltip :: Maybe Text
|
||||||
|
, wepfnDefault :: Maybe prec
|
||||||
|
} -> WorkflowEdgePayloadField (Fixed prec) fileid
|
||||||
|
WorkflowEdgePayloadFieldFile :: { wepffLabel :: Text
|
||||||
|
, wepffTooltip :: Maybe Text
|
||||||
|
, wepffDefault :: Maybe fileid
|
||||||
|
} -> WorkflowEdgePayloadField FileInfo fileid
|
||||||
|
WorkflowEdgePayloadFieldUser :: { wepfuLabel :: Text
|
||||||
|
, wepfuTooltip :: Maybe Text
|
||||||
|
, wepfuDefault :: Maybe userid
|
||||||
|
}
|
||||||
|
|
||||||
|
data WorkflowEdgePayloadSpecification fileid = forall payload. (FromJSON payload, ToJSON payload) => WorkflowEdgePayloadSpecification (WorkflowEdgePayloadField fileid payload)
|
||||||
|
|
||||||
|
data WorkflowPayload fileid = Map WorkflowEdgePayloadLabel (WorkflowEdgePayload)
|
||||||
|
|
||||||
|
data WorkflowGraphEdge userid authdnf fileid = WGE
|
||||||
|
{ wgeActors :: Set (WorkflowRole userid authdnf)
|
||||||
|
, wgeTarget :: WorkflowGraphNode userid authdnf fileid
|
||||||
, wgeForm :: Map WorkflowEdgePayloadLabel (NonNull (Set (WorkflowEdgePayloadSpecification fileid)))
|
, wgeForm :: Map WorkflowEdgePayloadLabel (NonNull (Set (WorkflowEdgePayloadSpecification fileid)))
|
||||||
}
|
}
|
||||||
data WorkflowEdgePayloadSpecification fileid = forall payload. (FromJSON payload, ToJSON payload) => WorkflowEdgePayloadSpecification (WorkflowEdgePayloadField payload fileid)
|
|
||||||
data WorkflowEdgePayloadField (payload :: *) fileid where
|
|
||||||
WorkflowEdgePayloadFieldText :: { wepftLabel :: Text, wepftPlaceholder :: Text, wepftTooltip :: Maybe Text, wepftDefault :: Maybe Text } -> WorkflowEdgePayloadField Text fileid
|
|
||||||
WorkflowEdgePayloadFieldNumber :: HasResolution prec => { wepfnLabel :: Text, wepfnPlaceholder :: Text, wepfnTooltip :: Maybe Text, wepfnDefault :: Maybe prec } -> WorkflowEdgePayloadField (Fixed prec) fileid
|
|
||||||
WorkflowEdgePayloadFieldFile :: { wepffLabel :: Text, wepffTooltip :: Maybe Text, wepffDefault :: Maybe fileid } -> WorkflowEdgePayloadField FileInfo fileid
|
|
||||||
-- deriveJSON defaultOptions ''WorkflowGraphEdge
|
|
||||||
|
|
||||||
data WorkflowGraph fileid = WG
|
--deriveJSON defaultOptions ''WorkflowGraphEdge
|
||||||
{ wgNodes :: Set WorkflowGraphNode
|
|
||||||
, wgEdges :: Set (WorkflowGraphEdge fileid)
|
|
||||||
|
data WorkflowGraph userid authdnf fileid = WG
|
||||||
|
{ wgNodes :: Set (WorkflowGraphNode userid authdnf fileid)
|
||||||
|
, wgEdges :: Set (WorkflowGraphEdge userid authdnf fileid)
|
||||||
}
|
}
|
||||||
|
|
||||||
-- deriveJSON defaultOptions ''WorkflowGraph
|
-- deriveJSON defaultOptions ''WorkflowGraph
|
||||||
|
|
||||||
|
|
||||||
data WorkflowInstanceScope term school course = WISGlobal
|
data WorkflowInstanceScope term school course = WISGlobal
|
||||||
| WISTerm term
|
| WISTerm term
|
||||||
| WISSchool school
|
| WISSchool school
|
||||||
| WISCourse course
|
| WISCourse course
|
||||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||||
|
|
||||||
deriveJSON defaultOptions
|
deriveJSON defaultOptions
|
||||||
{ constructorTagModifier = camelToPathPiece' 3
|
{ constructorTagModifier = camelToPathPiece' 3
|
||||||
} ''WorkflowInstanceScope
|
} ''WorkflowInstanceScope
|
||||||
|
|
||||||
data WorkflowInstanceScope' = WISTerm' | WISSchool' | WISCourse'
|
data WorkflowInstanceScope' = WISTerm' | WISSchool' | WISCourse'
|
||||||
deriving (Eq, Ord, Enum, Read, Show, Data, Generic, Typeable)
|
deriving (Eq, Ord, Enum, Read, Show, Data, Generic, Typeable)
|
||||||
|
|
||||||
data WorkflowRole user authdnf = WorkflowRoleUser user
|
|
||||||
| WorkflowRoleAuthorized authdnf
|
|
||||||
|
|||||||
Reference in New Issue
Block a user