refactor(workflow): more on types

This commit is contained in:
Sarah Vaupel 2020-04-02 17:01:42 +02:00 committed by Gregor Kleen
parent 5ff48d9b60
commit 0eea74b8b3
2 changed files with 63 additions and 26 deletions

View File

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

View File

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