From 3787cc201219a67491b738626cd0b996dc227e62 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Tue, 14 Apr 2020 15:41:37 +0200 Subject: [PATCH] refactor(workflow-types): refactor workflow payload --- src/Model/Types/Workflow.hs | 40 +++++++++++++++---------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/Model/Types/Workflow.hs b/src/Model/Types/Workflow.hs index c76af1426..9a29dac7f 100644 --- a/src/Model/Types/Workflow.hs +++ b/src/Model/Types/Workflow.hs @@ -175,35 +175,27 @@ data WorkflowInstanceScope' = WISGlobal' | WISTerm' | WISSchool' | WISCourse' type WorkflowPayloadLabel = CI Text -data WorkflowPayload fileid userid = forall payload. WorkflowPayload - { wpPayload :: Map WorkflowPayloadLabel (Map WorkflowPayloadFieldLabel (WorkflowFieldPayload fileid userid payload)) +type WorkflowPayload fileid userid = Map WorkflowPayloadLabel (Seq (WorkflowPayload' fileid userid)) + +data WorkflowPayload' fileid userid = forall payload. WorkflowPayload' + { wpPayload :: Map WorkflowPayloadFieldLabel (WorkflowFieldPayload fileid userid payload) , wpActor :: Maybe userid , wpActionTime :: UTCTime } data WorkflowFieldPayload fileid userid (payload :: *) where - WFPText :: { wfptLabel :: WorkflowPayloadFieldLabel - , wfptText :: Text - } -> WorkflowFieldPayload fileid userid Text - WFPNumber :: { wfpnLabel :: WorkflowPayloadFieldLabel - , wfpnNumber :: Scientific - } -> WorkflowFieldPayload fileid userid Scientific - WFPBool :: { wfpbLabel :: WorkflowPayloadFieldLabel - , wfpbBool :: Bool - } -> WorkflowFieldPayload fileid userid Bool - WFPFile :: { wfpfLabel :: WorkflowPayloadFieldLabel - , wfpfFile :: fileid - } -> WorkflowFieldPayload fileid userid fileid - WFPUser :: { wfpuLabel :: WorkflowPayloadFieldLabel - , wfpuUser :: userid - } -> WorkflowFieldPayload fileid userid userid + WFPText :: Text -> WorkflowFieldPayload fileid userid Text + WFPNumber :: Scientific -> WorkflowFieldPayload fileid userid Scientific + WFPBool :: Bool -> WorkflowFieldPayload fileid userid Bool + WFPFile :: fileid -> WorkflowFieldPayload fileid userid fileid + WFPUser :: userid -> WorkflowFieldPayload fileid userid userid instance (Show fileid, Show userid) => Show (WorkflowFieldPayload fileid userid payload) where - show WFPText{..} = "WFPText{label = " <> show wfptLabel <> ", text = " <> show wfptText <> "}" - show WFPNumber{..} = "WFPNumber{label = " <> show wfpnLabel <> ", number = " <> show wfpnNumber <> "}" - show WFPBool{..} = "WFPBool{label = " <> show wfpbLabel <> ", bool = " <> show wfpbBool <> "}" - show WFPFile{..} = "WFPFile{label = " <> show wfpfLabel <> ", file = " <> show wfpfFile <> "}" - show WFPUser{..} = "WFPUser{label = " <> show wfpuLabel <> ", user = " <> show wfpuUser <> "}" + show (WFPText wfptText ) = "WFPText{text = " <> show wfptText <> "}" + show (WFPNumber wfpnNumber) = "WFPNumber{number = " <> show wfpnNumber <> "}" + show (WFPBool wfpbBool ) = "WFPBool{bool = " <> show wfpbBool <> "}" + show (WFPFile wfpfFile ) = "WFPFile{file = " <> show wfpfFile <> "}" + show (WFPUser wfpuUser ) = "WFPUser{user = " <> show wfpuUser <> "}" data WorkflowFieldPayload' = WFPText' | WFPNumber' | WFPBool' | WFPFile' | WFPUser' deriving (Eq, Ord, Enum, Show, Read, Data, Generic, Typeable) @@ -365,5 +357,5 @@ testGraph = WorkflowGraph $ Map.fromList [("node1", WGN (Just "someLabel") True testGraphStr :: Data.ByteString.Lazy.Internal.ByteString testGraphStr = "{\"tag\":\"workflow\",\"nodes\":{\"node1\":{\"status\":{\"ident\":\"status-ident\",\"finished\":true,\"label\":\"status-label\"},\"edges\":[{\"actors\":[{\"tag\":\"initiator\"}],\"form\":{\"some-number\":[{\"tag\":\"number\",\"step\":0.01,\"label\":\"number-label\",\"placeholder\":\"number-placeholder\"}]},\"target\":\"node1\"}]}}}" ---testPayload :: WorkflowPayload Text Text -testPayload = Map.fromList [("sometext" :: WorkflowPayloadLabel, (Seq.singleton (WFPText "text-label" "hello world!"), Just "actor-user-id" :: Maybe Text, UTCTime (ModifiedJulianDay 58946) 57250))] +testPayload :: WorkflowPayload Text Text +testPayload = Map.fromList [("sometext" :: WorkflowPayloadLabel, (Seq.singleton (WorkflowPayload' (Map.fromList [("text-label", WFPText "hello world!")]) (Just "actor-user-id" :: Maybe Text) (UTCTime (ModifiedJulianDay 58946) 57250))))]