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