@@ -2,7 +2,9 @@ module PSR.Storage.SQLite.GetEvents (getEvents) where
22
33import Cardano.Api (
44 BlockHeader (.. ),
5+ BlockNo ,
56 Hash ,
7+ SlotNo ,
68 )
79import Cardano.Ledger.Plutus (ExUnits (.. ))
810import Data.Functor ((<&>) )
@@ -107,29 +109,53 @@ getEvents getEvents_select pool EventFilterParams{..} =
107109
108110 parameters = whereParams <> [" :limit" := limitParameter, " :offset" := offsetParameter]
109111
110- rows :: [BlockHeader :. (EventType , UTCTime , Maybe TraceLogs , Maybe [Hash BlockHeader ], Maybe EvalError , Maybe Integer , Maybe Integer ) :. Maybe ExecutionContext ] <-
111- queryNamed getEvents_select conn eventsQuery parameters
112-
113- pure $
114- rows <&> \ case
115- (blockHeader :. (eventType, createdAt, mTraceLogs, blocksCancelled, evalError, mExBudgetCpu, mExBudgetMem) :. mExecutionContext) ->
116- let
117- BlockHeader slotNo blockHash blockNo = blockHeader
118- payload = case eventType of
119- Execution ->
120- case (mTraceLogs, mExBudgetCpu, mExBudgetMem, mExecutionContext) of
121- (Just traceLogs, Just exBudgetCpu, Just exBudgetMem, Just context) ->
122- ExecutionPayload blockNo $
123- ExecutionEventPayload
124- { traceLogs
125- , evalError
126- , exUnits = ExUnits (fromInteger exBudgetCpu) (fromInteger exBudgetMem)
127- , context
128- }
129- _ ->
130- -- TODO: handle the error properly
131- error " Failed to retrieve execution event"
132- Rollback -> RollbackPayload (maybe [] id blocksCancelled)
133- Selection -> SelectionPayload blockNo
134- in
135- Event {.. }
112+ rows <- queryNamed getEvents_select conn eventsQuery parameters
113+ pure $ rowToEvent <$> rows
114+ where
115+ rowToEvent ::
116+ ( ( SlotNo
117+ , Hash BlockHeader
118+ , Maybe BlockNo
119+ , EventType
120+ , UTCTime
121+ , Maybe TraceLogs
122+ , Maybe [Hash BlockHeader ]
123+ , Maybe EvalError
124+ , Maybe Integer
125+ , Maybe Integer
126+ )
127+ :. Maybe ExecutionContext
128+ ) ->
129+ Event
130+ rowToEvent
131+ ( ( slotNo
132+ , blockHash
133+ , mBlockNo
134+ , eventType
135+ , createdAt
136+ , mTraceLogs
137+ , blocksCancelled
138+ , evalError
139+ , mExBudgetCpu
140+ , mExBudgetMem
141+ )
142+ :. mExecutionContext
143+ ) =
144+ let
145+ payloadError = " rowToEvent: Unable to parse the payload."
146+ payload = fromMaybe (error payloadError) $ case eventType of
147+ Execution -> do
148+ traceLogs <- mTraceLogs
149+ exBudgetCpu <- mExBudgetCpu
150+ exBudgetMem <- mExBudgetMem
151+ let exUnits =
152+ ExUnits
153+ (fromInteger exBudgetCpu)
154+ (fromInteger exBudgetMem)
155+ context <- mExecutionContext
156+ blockNo <- mBlockNo
157+ pure $ ExecutionPayload blockNo $ ExecutionEventPayload {.. }
158+ Rollback -> pure $ RollbackPayload (maybe [] id blocksCancelled)
159+ Selection -> SelectionPayload <$> mBlockNo
160+ in
161+ Event {.. }
0 commit comments