@@ -318,57 +318,67 @@ export const fetchDrepVoteDetails = async (dRepId: string, isScript?: boolean) =
318318 }
319319
320320 const result = ( await prisma . $queryRaw `
321- WITH DrepVoteDetails
322- as (SELECT DISTINCT
323- ON (gp.id, voting_procedure.drep_voter) concat(encode(gov_action_tx.hash, 'hex'), '#', gp.index) as govActionId,
324- gov_action_metadata.title as title,
325- voting_procedure.vote::text as voteType,
326- voting_anchor.url as voteAnchorUrl,
327- encode(voting_anchor.data_hash, 'hex') as voteAnchorHash,
328- block.epoch_no as epochNo,
329- block.time as time,
330- encode(vote_tx.hash, 'hex') as voteTxHash,
331- gp.type as govActionType
321+ WITH TimeOrderedDrepVoteDetails AS (
322+ SELECT DISTINCT
323+ ON (vote_tx.id, gp.id, voting_procedure.drep_voter)
324+ concat(encode(gov_action_tx.hash, 'hex'), '#', gp.index) AS govActionId,
325+ gov_action_metadata.title AS title,
326+ voting_procedure.vote::text AS voteType,
327+ voting_anchor.url AS voteAnchorUrl,
328+ encode(voting_anchor.data_hash, 'hex') AS voteAnchorHash,
329+ block.epoch_no AS epochNo,
330+ block.time AS time,
331+ encode(vote_tx.hash, 'hex') AS voteTxHash,
332+ gp.type AS govActionType
332333 FROM voting_procedure
333334 JOIN gov_action_proposal AS gp
334- ON gp.id = voting_procedure.gov_action_proposal_id
335+ ON gp.id = voting_procedure.gov_action_proposal_id
335336 JOIN drep_hash
336- ON drep_hash.id = voting_procedure.drep_voter
337+ ON drep_hash.id = voting_procedure.drep_voter
337338 LEFT JOIN voting_anchor
338- ON voting_anchor.id = voting_procedure.voting_anchor_id
339+ ON voting_anchor.id = voting_procedure.voting_anchor_id
339340 JOIN tx AS gov_action_tx
340- ON gov_action_tx.id = gp.tx_id
341+ ON gov_action_tx.id = gp.tx_id
341342 JOIN tx AS vote_tx
342- ON vote_tx.id = voting_procedure.tx_id
343+ ON vote_tx.id = voting_procedure.tx_id
343344 JOIN block
344- ON block.id = vote_tx.block_id
345+ ON block.id = vote_tx.block_id
345346 LEFT JOIN off_chain_vote_data
346- ON off_chain_vote_data.voting_anchor_id = gp.voting_anchor_id
347+ ON off_chain_vote_data.voting_anchor_id = gp.voting_anchor_id
347348 LEFT JOIN off_chain_vote_gov_action_data AS gov_action_metadata
348- ON gov_action_metadata.off_chain_vote_data_id = off_chain_vote_data.id
349- WHERE drep_hash.raw = decode(${ dRepId }
350- , 'hex')
351- AND (drep_hash.has_script = ${ scriptPart [ 0 ] }
352- OR drep_hash.has_script= ${ scriptPart [ 1 ] } )
353- ORDER BY gp.id, voting_procedure.drep_voter, block.time, voting_procedure.id DESC),
354- TimeOrderedDrepVoteDetails as (
355- select *
356- from DrepVoteDetails
357- order by DrepVoteDetails.time desc)
358- SELECT json_agg(
359- json_build_object(
360- 'govActionId', TimeOrderedDrepVoteDetails.govActionId,
361- 'title', TimeOrderedDrepVoteDetails.title,
362- 'voteType', TimeOrderedDrepVoteDetails.voteType,
363- 'voteAnchorUrl', TimeOrderedDrepVoteDetails.voteAnchorUrl,
364- 'voteAnchorHash', TimeOrderedDrepVoteDetails.voteAnchorHash,
365- 'epochNo', TimeOrderedDrepVoteDetails.epochNo,
366- 'time', TimeOrderedDrepVoteDetails.time,
367- 'voteTxHash', TimeOrderedDrepVoteDetails.voteTxHash,
368- 'govActionType', TimeOrderedDrepVoteDetails.govActionType
369- )
370- ) AS votes
371- from TimeOrderedDrepVoteDetails
349+ ON gov_action_metadata.off_chain_vote_data_id = off_chain_vote_data.id
350+ WHERE drep_hash.raw = decode(${ dRepId } , 'hex')
351+ AND (drep_hash.has_script = ${ scriptPart [ 0 ] } OR drep_hash.has_script = ${ scriptPart [ 1 ] } )
352+ ORDER BY vote_tx.id DESC, gp.id, voting_procedure.drep_voter, block.time, voting_procedure.id DESC
353+ ),
354+ GroupedVoteDetails AS (
355+ SELECT DISTINCT ON (govActionId)
356+ govActionId,
357+ title,
358+ voteType,
359+ voteAnchorUrl,
360+ voteAnchorHash,
361+ epochNo,
362+ time,
363+ voteTxHash,
364+ govActionType
365+ FROM TimeOrderedDrepVoteDetails
366+ ORDER BY govActionId, voteTxHash DESC
367+ )
368+ SELECT json_agg(
369+ json_build_object(
370+ 'govActionId', GroupedVoteDetails.govActionId,
371+ 'title', GroupedVoteDetails.title,
372+ 'voteType', GroupedVoteDetails.voteType,
373+ 'voteAnchorUrl', GroupedVoteDetails.voteAnchorUrl,
374+ 'voteAnchorHash', GroupedVoteDetails.voteAnchorHash,
375+ 'epochNo', GroupedVoteDetails.epochNo,
376+ 'time', GroupedVoteDetails.time,
377+ 'voteTxHash', GroupedVoteDetails.voteTxHash,
378+ 'govActionType', GroupedVoteDetails.govActionType
379+ )
380+ ) AS votes
381+ from GroupedVoteDetails
372382 ` ) as Record < any , any > [ ]
373383 return result [ 0 ] . votes
374384}
0 commit comments