Skip to content
This repository has been archived by the owner on Dec 8, 2022. It is now read-only.

Commit

Permalink
Merge pull request #83 from input-output-hk/ksaric/CAD-1824
Browse files Browse the repository at this point in the history
[CAD-1824] List of delisted Stake pools.
  • Loading branch information
ksaric committed Sep 29, 2020
2 parents 08bcf79 + 3c8d520 commit 94e74c7
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/Cardano/Db/Query.hs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ module Cardano.Db.Query
, queryLatestBlockNo
, queryCheckPoints
, queryDelistedPool
, queryAllDelistedPools
, queryReservedTicker
, queryAdminUsers
, queryPoolMetadataFetchError
Expand Down Expand Up @@ -140,6 +141,12 @@ queryDelistedPool poolId = do
pure pool
pure $ maybe False (\_ -> True) (listToMaybe res)

-- |Return all delisted pools.
queryAllDelistedPools :: MonadIO m => ReaderT SqlBackend m [DelistedPool]
queryAllDelistedPools = do
res <- selectList [] []
pure $ entityVal <$> res

-- | Check if the ticker is in the table.
queryReservedTicker :: MonadIO m => Text -> ReaderT SqlBackend m (Maybe ReservedTicker)
queryReservedTicker reservedTickerName = do
Expand Down
8 changes: 8 additions & 0 deletions src/DB.hs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ data DataLayer = DataLayer
, dlAddReservedTicker :: Text -> PoolMetadataHash -> IO (Either DBFail ReservedTickerId)
, dlCheckReservedTicker :: Text -> IO (Maybe ReservedTicker)

, dlGetDelistedPools :: IO [PoolId]
, dlCheckDelistedPool :: PoolId -> IO Bool
, dlAddDelistedPool :: PoolId -> IO (Either DBFail PoolId)

Expand Down Expand Up @@ -97,6 +98,8 @@ stubbedDataLayer ioDataMap ioDelistedPool = DataLayer

, dlAddMetaDataReference = \poolId poolUrl poolMetadataHash -> panic "!"

, dlGetDelistedPools = readIORef ioDelistedPool

, dlCheckDelistedPool = \poolId -> do
blacklistedPool' <- readIORef ioDelistedPool
return $ poolId `elem` blacklistedPool'
Expand Down Expand Up @@ -152,6 +155,11 @@ postgresqlDataLayer = DataLayer
, dlCheckReservedTicker = \tickerName ->
runDbAction Nothing $ queryReservedTicker tickerName

, dlGetDelistedPools = do
delistedPoolsDB <- runDbAction Nothing queryAllDelistedPools
-- Convert from DB-specific type to the "general" type
return $ map (\delistedPoolDB -> PoolId . getPoolId $ delistedPoolPoolId delistedPoolDB) delistedPoolsDB

, dlCheckDelistedPool = \poolId -> do
runDbAction Nothing $ queryDelistedPool poolId

Expand Down
14 changes: 13 additions & 1 deletion src/Lib.hs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ type ApiRes verb a = verb '[JSON] (ApiResult DBFail a)
-- GET api/v1/metadata/{hash}
type OfflineMetadataAPI = "api" :> "v1" :> "metadata" :> Capture "id" PoolId :> Capture "hash" PoolMetadataHash :> Get '[JSON] (Headers '[Header "Cache" Text] (ApiResult DBFail PoolMetadataWrapped))

-- GET api/v1/delisted
type DelistedPoolsAPI = "api" :> "v1" :> "delisted" :> ApiRes Get [PoolId]

-- POST api/v1/delist
#ifdef DISABLE_BASIC_AUTH
type DelistPoolAPI = "api" :> "v1" :> "delist" :> ReqBody '[JSON] PoolId :> ApiRes Patch PoolId
Expand All @@ -63,7 +66,7 @@ type DelistPoolAPI = BasicAuthURL :> "api" :> "v1" :> "delist" :> ReqBody '[JSON
type FetchPoolErrorAPI = BasicAuthURL :> "api" :> "v1" :> "errors" :> QueryParam "poolId" PoolId :> ApiRes Get [PoolFetchError]
#endif

type SmashAPI = OfflineMetadataAPI :<|> DelistPoolAPI :<|> FetchPoolErrorAPI
type SmashAPI = OfflineMetadataAPI :<|> DelistPoolAPI :<|> FetchPoolErrorAPI :<|> DelistedPoolsAPI

-- | Swagger spec for Todo API.
todoSwagger :: Swagger
Expand Down Expand Up @@ -222,6 +225,7 @@ server configuration dataLayer
:<|> getPoolOfflineMetadata dataLayer
:<|> postDelistPool dataLayer
:<|> fetchPoolErrorAPI dataLayer
:<|> getDelistedPools dataLayer

#ifdef DISABLE_BASIC_AUTH
fetchPoolErrorAPI :: DataLayer -> Maybe PoolId -> Handler (ApiResult DBFail [PoolFetchError])
Expand Down Expand Up @@ -294,6 +298,14 @@ getPoolOfflineMetadata dataLayer poolId poolHash = fmap (addHeader "always") . c
then return . ApiResult . Right $ PoolMetadataWrapped poolMetadata
else throwIO err404


-- Get all delisted pools
getDelistedPools :: DataLayer -> Handler (ApiResult DBFail [PoolId])
getDelistedPools dataLayer = convertIOToHandler $ do
let getAllDelisted = dlGetDelistedPools dataLayer
allDelistedPools <- getAllDelisted
return . ApiResult . Right $ allDelistedPools

-- For now, we just ignore the @BasicAuth@ definition.
instance (HasSwagger api) => HasSwagger (BasicAuth name typo :> api) where
toSwagger _ = toSwagger (Proxy :: Proxy api)
Expand Down

0 comments on commit 94e74c7

Please sign in to comment.