66
77module VVA.DRep where
88
9- import Control.Monad.Except (MonadError )
9+ import Control.Monad.Except (MonadError )
1010import Control.Monad.Reader
1111
1212import Crypto.Hash
1313
14- import Data.ByteString (ByteString )
15- import qualified Data.ByteString.Base16 as Base16
16- import qualified Data.ByteString.Char8 as C
17- import Data.FileEmbed (embedFile )
18- import Data.Foldable (Foldable (sum ))
19- import Data.Has (Has )
20- import qualified Data.Map as M
21- import Data.Maybe (fromMaybe , isJust , isNothing )
14+ import Data.ByteString (ByteString )
15+ import qualified Data.ByteString.Base16 as Base16
16+ import qualified Data.ByteString.Char8 as C
17+ import Data.FileEmbed (embedFile )
18+ import Data.Foldable (Foldable (sum ))
19+ import Data.Has (Has )
20+ import qualified Data.Map as M
21+ import Data.Maybe (fromMaybe , isJust , isNothing )
2222import Data.Scientific
23- import Data.String (fromString )
24- import Data.Text (Text , pack , unpack )
25- import qualified Data.Text.Encoding as Text
23+ import Data.String (fromString )
24+ import Data.Text (Text , pack , unpack , intercalate )
25+ import qualified Data.Text.Encoding as Text
2626import Data.Time
2727
28- import qualified Database.PostgreSQL.Simple as SQL
28+ import qualified Database.PostgreSQL.Simple as SQL
29+ import Database.PostgreSQL.Simple.Types (In (.. ))
30+
2931import VVA.Config
30- import VVA.Pool (ConnectionPool , withPool )
31- import qualified VVA.Proposal as Proposal
32- import VVA.Types (AppError , DRepInfo (.. ), DRepRegistration (.. ), DRepStatus (.. ),
33- DRepType (.. ), Proposal (.. ), Vote (.. ))
32+ import VVA.Pool (ConnectionPool , withPool )
33+ import qualified VVA.Proposal as Proposal
34+ import VVA.Types (AppError , DRepInfo (.. ), DRepRegistration (.. ), DRepStatus (.. ),
35+ DRepType (.. ), Proposal (.. ), Vote ( .. ), DRepVotingPowerList (.. ))
3436
3537sqlFrom :: ByteString -> SQL. Query
3638sqlFrom bs = fromString $ unpack $ Text. decodeUtf8 bs
@@ -198,3 +200,29 @@ getDRepInfo drepId = withPool $ \conn -> do
198200 }
199201 [] -> return $ DRepInfo False False False False False Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
200202 _ -> error " Unexpected result from database query in getDRepInfo"
203+
204+ getAllDRepsVotingPowerSql :: SQL. Query
205+ getAllDRepsVotingPowerSql = sqlFrom $ (embedFile " sql/get-dreps-voting-power-list.sql" )
206+
207+ getFilteredDRepVotingPowerSql :: SQL. Query
208+ getFilteredDRepVotingPowerSql = sqlFrom $ (embedFile " sql/get-filtered-dreps-voting-power.sql" )
209+
210+ getDRepsVotingPowerList ::
211+ (Has ConnectionPool r , Has VVAConfig r , MonadReader r m , MonadIO m ) =>
212+ [Text ] ->
213+ m [DRepVotingPowerList ]
214+ getDRepsVotingPowerList identifiers = withPool $ \ conn -> do
215+ results <- if null identifiers
216+ then do
217+ liftIO $ SQL. query_ conn getAllDRepsVotingPowerSql
218+ else do
219+ resultsPerIdentifier <- forM identifiers $ \ identifier -> do
220+ liftIO $ SQL. query conn getFilteredDRepVotingPowerSql (identifier, identifier)
221+
222+ return $ concat resultsPerIdentifier
223+
224+ return
225+ [ DRepVotingPowerList view hashRaw votingPower
226+ | (view, hashRaw, votingPower') <- results
227+ , let votingPower = floor @ Scientific votingPower'
228+ ]
0 commit comments