Skip to content

Commit 99625fa

Browse files
committed
Address the nullability of a block in GetEvents
1 parent 9a23815 commit 99625fa

1 file changed

Lines changed: 52 additions & 26 deletions

File tree

lib/PSR/Storage/SQLite/GetEvents.hs

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ module PSR.Storage.SQLite.GetEvents (getEvents) where
22

33
import Cardano.Api (
44
BlockHeader (..),
5+
BlockNo,
56
Hash,
7+
SlotNo,
68
)
79
import Cardano.Ledger.Plutus (ExUnits (..))
810
import 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

Comments
 (0)