refactor(workflow): more on types
This commit is contained in:
parent
5ff48d9b60
commit
0eea74b8b3
@ -1,14 +1,14 @@
|
||||
WorkflowDefinition
|
||||
graph (WorkflowGraph FileId)
|
||||
initiator (WorkflowRole UserId AuthDNF)
|
||||
|
||||
WorkflowInitiator
|
||||
-- TODO descriptor of a "role" that can initiate an instance of a workflow in a specified scope
|
||||
graph (WorkflowGraph UserId AuthDNF FileId)
|
||||
scope WorkflowInstanceScope'
|
||||
|
||||
WorkflowInstance
|
||||
definition WorkflowDefinition
|
||||
initiator (WorkflowRole UserId AuthDNF)
|
||||
graph (WorkflowGraph UserId AuthDNF FileId)
|
||||
scope (WorkflowInstaceScope TermId SchoolId CourseId)
|
||||
|
||||
Workflow
|
||||
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
|
||||
|
||||
|
||||
data WorkflowRole userid authdnf = WorkflowRoleUser userid
|
||||
| WorkflowRoleAuthorized authdnf
|
||||
| WorkflowRoleInitiator userid
|
||||
|
||||
|
||||
data WorkflowGraphNodeStatus = WGNS
|
||||
{ wgnsIdent :: CI Text
|
||||
, wgnsFinished :: Bool
|
||||
, wgnsLabel :: Maybe Text
|
||||
}
|
||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||
|
||||
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)
|
||||
|
||||
deriveJSON defaultOptions ''WorkflowGraphNode
|
||||
|
||||
|
||||
data WorkflowEdgePayload = WEPText Text
|
||||
| WEPBool Bool
|
||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||
deriveJSON defaultOptions
|
||||
{ constructorTagModifier = camelToPathPiece' 3
|
||||
} ''WorkflowEdgePayload
|
||||
|
||||
deriveJSON defaultOptions ''WorkflowEdgePayload
|
||||
|
||||
data WorkflowEdgePayload' = WEPText' | WEPBool'
|
||||
deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable)
|
||||
|
||||
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)))
|
||||
}
|
||||
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
|
||||
{ wgNodes :: Set WorkflowGraphNode
|
||||
, wgEdges :: Set (WorkflowGraphEdge fileid)
|
||||
--deriveJSON defaultOptions ''WorkflowGraphEdge
|
||||
|
||||
|
||||
data WorkflowGraph userid authdnf fileid = WG
|
||||
{ wgNodes :: Set (WorkflowGraphNode userid authdnf fileid)
|
||||
, wgEdges :: Set (WorkflowGraphEdge userid authdnf fileid)
|
||||
}
|
||||
|
||||
-- deriveJSON defaultOptions ''WorkflowGraph
|
||||
|
||||
|
||||
data WorkflowInstanceScope term school course = WISGlobal
|
||||
| WISTerm term
|
||||
| WISSchool school
|
||||
| WISCourse course
|
||||
deriving (Eq, Ord, Show, Read, Data, Generic, Typeable)
|
||||
|
||||
deriveJSON defaultOptions
|
||||
{ constructorTagModifier = camelToPathPiece' 3
|
||||
} ''WorkflowInstanceScope
|
||||
|
||||
data WorkflowInstanceScope' = WISTerm' | WISSchool' | WISCourse'
|
||||
deriving (Eq, Ord, Enum, Read, Show, Data, Generic, Typeable)
|
||||
|
||||
data WorkflowRole user authdnf = WorkflowRoleUser user
|
||||
| WorkflowRoleAuthorized authdnf
|
||||
|
||||
Loading…
Reference in New Issue
Block a user