From fcf3c4a221a1f8cc20df9634b47fa9e7e078a1ef Mon Sep 17 00:00:00 2001 From: Miro Date: Sun, 27 Jul 2025 20:47:07 +0200 Subject: [PATCH] Filtering already voted proposal by hash adn index --- govtool/backend/src/VVA/API.hs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 06b9fd39f..1c7ab69c8 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -296,20 +296,20 @@ getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do CacheEnv {dRepGetVotesCache} <- asks vvaCache (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep.getVotes dRepId [] - let voteMapById = Map.fromList $ - map (\vote -> (Types.voteGovActionId vote, vote)) votes + let voteMapByTxHash = Map.fromList $ + map (\vote -> (pack $ Prelude.takeWhile (/= '#') (unpack $ Types.voteGovActionId vote), vote)) votes processedProposals <- filter (isProposalSearchedFor mSearch) <$> mapSortAndFilterProposals selectedTypes sortMode proposals - return + return $ [ VoteResponse { voteResponseVote = voteToResponse vote , voteResponseProposal = proposalResponse } | proposalResponse <- processedProposals - , let govActionId = unHexText (proposalResponseTxHash proposalResponse) <> "#" <> pack (show $ proposalResponseIndex proposalResponse) - , Just vote <- [Map.lookup govActionId voteMapById] + , let txHash = unHexText (proposalResponseTxHash proposalResponse) + , Just vote <- [Map.lookup txHash voteMapByTxHash] ] drepInfo :: App m => HexText -> m DRepInfoResponse @@ -401,9 +401,12 @@ listProposals selectedTypes sortMode mPage mPageSize mDrepRaw mSearchQuery = do -- proposals that the provided Drep has already voted on should be filtered out proposalsToRemove <- case mDrepRaw of Nothing -> return [] - Just drepId -> - map (voteParamsProposalId . voteResponseVote) - <$> getVotes drepId [] Nothing Nothing + Just drepId -> do + votes <- getVotes drepId [] Nothing Nothing + return + [ (proposalResponseTxHash p, proposalResponseIndex p) + | VoteResponse{voteResponseProposal = p} <- votes + ] CacheEnv {proposalListCache} <- asks vvaCache @@ -412,9 +415,9 @@ listProposals selectedTypes sortMode mPage mPageSize mDrepRaw mSearchQuery = do mappedSortedAndFilteredProposals <- mapSortAndFilterProposals selectedTypes sortMode proposals let filteredProposals = filter - ( \p@ProposalResponse {proposalResponseId} -> - proposalResponseId `notElem` proposalsToRemove - && isProposalSearchedFor mSearchQuery p + (\p@ProposalResponse{proposalResponseTxHash, proposalResponseIndex} -> + (proposalResponseTxHash, proposalResponseIndex) `notElem` proposalsToRemove + && isProposalSearchedFor mSearchQuery p ) mappedSortedAndFilteredProposals let total = length filteredProposals :: Int