From 555f62a7ef0e458c2d50f1f3ab704840ad947f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Fri, 7 Feb 2025 13:58:36 +0100 Subject: [PATCH] fix(#2920): fix unhandled exception on missing proposal for vote --- CHANGELOG.md | 1 + govtool/backend/src/VVA/API.hs | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ef661132..0c6c9adf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ changes. ### Fixed - Fix calculating votes counting for governance actions +- Fix crashing backend on unhandled missing proposal from vote [Issue 2920](https://github.com/IntersectMBO/govtool/issues/2920) ### Changed diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 0a09024be..5424b32e7 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -278,14 +278,19 @@ getVotes :: App m => HexText -> [GovernanceActionType] -> Maybe GovernanceAction getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do CacheEnv {dRepGetVotesCache} <- asks vvaCache (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep.getVotes dRepId [] + let voteMap = Map.fromList $ map (\vote@Types.Vote {..} -> (voteProposalId, vote)) votes + processedProposals <- filter (isProposalSearchedFor mSearch) <$> mapSortAndFilterProposals selectedTypes sortMode proposals + return $ [ VoteResponse - { voteResponseVote = voteToResponse (voteMap Map.! read (unpack proposalResponseId)) + { voteResponseVote = voteToResponse vote , voteResponseProposal = proposalResponse } | proposalResponse@ProposalResponse{proposalResponseId} <- processedProposals + , let proposalIdInt = read (unpack proposalResponseId) :: Int + , Just vote <- [Map.lookup (toInteger proposalIdInt) voteMap] ] drepInfo :: App m => HexText -> m DRepInfoResponse