1+ {-# LANGUAGE DataKinds #-}
12{-# LANGUAGE FlexibleContexts #-}
23{-# LANGUAGE NamedFieldPuns #-}
34{-# LANGUAGE OverloadedStrings #-}
45{-# LANGUAGE RecordWildCards #-}
56{-# LANGUAGE TypeOperators #-}
67{-# LANGUAGE ViewPatterns #-}
7- {-# LANGUAGE DataKinds #-}
88
99module VVA.API where
1010
@@ -13,48 +13,47 @@ import Control.Exception (throw, throwIO)
1313import Control.Monad.Except (runExceptT , throwError )
1414import Control.Monad.Reader
1515
16- import Data.Aeson (Value (.. ), Array , decode , ToJSON , toJSON )
16+ import Data.Aeson (Array , ToJSON , Value (.. ), decode , toJSON )
1717import Data.Bool (Bool )
18- import Data.List (sortOn , sort )
18+ import Data.ByteString.Lazy (ByteString )
19+ import qualified Data.ByteString.Lazy as BSL
20+ import Data.List (sort , sortOn )
1921import qualified Data.Map as Map
2022import Data.Maybe (Maybe (Nothing ), catMaybes , fromMaybe , mapMaybe )
2123import Data.Ord (Down (.. ))
2224import Data.Text hiding (any , drop , elem , filter , length , map , null , take )
2325import qualified Data.Text as Text
2426import qualified Data.Text.Lazy as TL
2527import qualified Data.Text.Lazy.Encoding as TL
26- import qualified Data.Vector as V
28+ import Data.Time ( TimeZone , localTimeToUTC )
2729import Data.Time.LocalTime (TimeZone , getCurrentTimeZone )
28-
30+ import qualified Data.Vector as V
2931
3032import Numeric.Natural (Natural )
3133
3234import Servant.API
33- import Servant.Server
3435import Servant.Exception (Throws )
36+ import Servant.Server
37+
3538import System.Random (randomRIO )
3639
3740import Text.Read (readMaybe )
3841
42+ import VVA.Account as Account
3943import qualified VVA.AdaHolder as AdaHolder
4044import VVA.API.Types
4145import VVA.Cache (cacheRequest )
4246import VVA.Config
4347import qualified VVA.DRep as DRep
4448import qualified VVA.Epoch as Epoch
49+ import qualified VVA.Ipfs as Ipfs
4550import VVA.Network as Network
46- import VVA.Account as Account
4751import qualified VVA.Proposal as Proposal
4852import qualified VVA.Transaction as Transaction
4953import qualified VVA.Types as Types
5054import VVA.Types (App , AppEnv (.. ),
51- AppError (CriticalError , InternalError , ValidationError , AppIpfsError ),
55+ AppError (AppIpfsError , CriticalError , InternalError , ValidationError ),
5256 CacheEnv (.. ))
53- import Data.Time (TimeZone , localTimeToUTC )
54- import qualified VVA.Ipfs as Ipfs
55- import Data.ByteString.Lazy (ByteString )
56- import qualified Data.ByteString.Lazy as BSL
57- import Servant.Exception (Throws )
5857
5958type VVAApi =
6059 " ipfs"
@@ -127,7 +126,7 @@ upload mFileName fileContentText = do
127126 throwError $ ValidationError " The uploaded file is larger than 500Kb"
128127 eIpfsHash <- liftIO $ Ipfs. ipfsUpload vvaPinataJwt fileName fileContent
129128 case eIpfsHash of
130- Left err -> throwError $ AppIpfsError err
129+ Left err -> throwError $ AppIpfsError err
131130 Right ipfsHash -> return $ UploadResponse ipfsHash
132131
133132mapDRepType :: Types. DRepType -> DRepType
@@ -188,9 +187,9 @@ drepList mSearchQuery statuses mSortMode mPage mPageSize = do
188187 viewLower = Text. toLower dRepRegistrationView
189188 hashLower = Text. toLower dRepRegistrationDRepHash
190189 in case dRepRegistrationType of
191- Types. SoleVoter ->
190+ Types. SoleVoter ->
192191 searchLower == viewLower || searchLower == hashLower
193- Types. DRep ->
192+ Types. DRep ->
194193 True
195194
196195
@@ -318,13 +317,13 @@ getVotes :: App m => HexText -> [GovernanceActionType] -> Maybe GovernanceAction
318317getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do
319318 CacheEnv {dRepGetVotesCache} <- asks vvaCache
320319 (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep. getVotes dRepId []
321-
320+
322321 let voteMapById = Map. fromList $
323322 map (\ vote -> (Types. voteGovActionId vote, vote)) votes
324-
325- processedProposals <- filter (isProposalSearchedFor mSearch) <$>
323+
324+ processedProposals <- filter (isProposalSearchedFor mSearch) <$>
326325 mapSortAndFilterProposals selectedTypes sortMode proposals
327-
326+
328327 return
329328 [ VoteResponse
330329 { voteResponseVote = voteToResponse vote
@@ -334,7 +333,7 @@ getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do
334333 , let govActionId = unHexText (proposalResponseTxHash proposalResponse) <> " #" <> pack (show $ proposalResponseIndex proposalResponse)
335334 , Just vote <- [Map. lookup govActionId voteMapById]
336335 ]
337-
336+
338337drepInfo :: App m => HexText -> m DRepInfoResponse
339338drepInfo (unHexText -> dRepId) = do
340339 CacheEnv {dRepInfoCache} <- asks vvaCache
@@ -365,15 +364,15 @@ drepInfo (unHexText -> dRepId) = do
365364drepVotingPowerList :: App m => [Text ] -> m [DRepVotingPowerListResponse ]
366365drepVotingPowerList identifiers = do
367366 CacheEnv {dRepVotingPowerListCache} <- asks vvaCache
368-
367+
369368 let cacheKey = Text. intercalate " ," (sort identifiers)
370-
371- results <- cacheRequest dRepVotingPowerListCache cacheKey $
369+
370+ results <- cacheRequest dRepVotingPowerListCache cacheKey $
372371 DRep. getDRepsVotingPowerList identifiers
373-
372+
374373 return $ map toDRepVotingPowerListResponse results
375374 where
376- toDRepVotingPowerListResponse Types. DRepVotingPowerList {.. } =
375+ toDRepVotingPowerListResponse Types. DRepVotingPowerList {.. } =
377376 DRepVotingPowerListResponse
378377 { drepVotingPowerListResponseView = drepView
379378 , drepVotingPowerListResponseHashRaw = HexText drepHashRaw
@@ -456,9 +455,9 @@ getProposal g@(GovActionId govActionTxHash govActionIndex) mDrepId' = do
456455 let mDrepId = unHexText <$> mDrepId'
457456 CacheEnv {getProposalCache} <- asks vvaCache
458457 proposal@ Types. Proposal {proposalUrl, proposalDocHash} <- cacheRequest getProposalCache (unHexText govActionTxHash, govActionIndex) (Proposal. getProposal (unHexText govActionTxHash) govActionIndex)
459-
458+
460459 timeZone <- liftIO getCurrentTimeZone
461-
460+
462461 let proposalResponse = proposalToResponse timeZone proposal
463462 voteResponse <- case mDrepId of
464463 Nothing -> return Nothing
@@ -478,20 +477,20 @@ getProposal g@(GovActionId govActionTxHash govActionIndex) mDrepId' = do
478477getEnactedProposalDetails :: App m => Maybe GovernanceActionType -> m (Maybe EnactedProposalDetailsResponse )
479478getEnactedProposalDetails maybeType = do
480479 let proposalType = maybe " HardForkInitiation" governanceActionTypeToText maybeType
481-
480+
482481 mDetails <- Proposal. getPreviousEnactedProposal proposalType
483-
482+
484483 let response = enactedProposalDetailsToResponse <$> mDetails
485-
484+
486485 return response
487486 where
488487 governanceActionTypeToText :: GovernanceActionType -> Text
489- governanceActionTypeToText actionType =
488+ governanceActionTypeToText actionType =
490489 case actionType of
491490 HardForkInitiation -> " HardForkInitiation"
492- ParameterChange -> " ParameterChange"
493- _ -> " HardForkInitiation"
494-
491+ ParameterChange -> " ParameterChange"
492+ _ -> " HardForkInitiation"
493+
495494 enactedProposalDetailsToResponse :: Types. EnactedProposalDetails -> EnactedProposalDetailsResponse
496495 enactedProposalDetailsToResponse Types. EnactedProposalDetails {.. } =
497496 EnactedProposalDetailsResponse
@@ -513,7 +512,7 @@ getTransactionStatus (unHexText -> transactionId) = do
513512 return $ GetTransactionStatusResponse $ case status of
514513 Just value -> Just $ toJSON value
515514 Nothing -> Nothing
516-
515+
517516throw500 :: App m => m ()
518517throw500 = throwError $ CriticalError " intentional system break for testing purposes"
519518
0 commit comments