From e5efb877d3f7a79d8ab5d960d4ac4af050ff2f13 Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Wed, 30 Mar 2022 17:43:58 -0600 Subject: [PATCH] implements release notes filtering --- src/Handler/Marketplace.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Handler/Marketplace.hs b/src/Handler/Marketplace.hs index ff940b0..6f8c7f2 100644 --- a/src/Handler/Marketplace.hs +++ b/src/Handler/Marketplace.hs @@ -37,6 +37,9 @@ import Data.Aeson ( decode ) import qualified Data.Attoparsec.Text as Atto +import Data.Attoparsec.Text ( Parser + , parseOnly + ) import Data.ByteArray.Encoding ( Base(..) , convertToBase ) @@ -116,6 +119,7 @@ import Util.Shared ( filterDependencyBestVersion , getVersionSpecFromQuery ) import Yesod.Core ( Content(ContentFile) + , MonadHandler , MonadResource , RenderRoute(renderRoute) , TypedContent @@ -133,6 +137,14 @@ import Yesod.Core.Types ( JSONResponse(..) ) import Yesod.Persist ( YesodDB ) import Yesod.Persist.Core ( YesodPersist(runDB) ) +queryParamAs :: MonadHandler m => Text -> Parser a -> m (Maybe a) +queryParamAs k p = lookupGetParam k >>= \case + Nothing -> pure Nothing + Just x -> case parseOnly p x of + Left e -> + sendResponseStatus @_ @Text status400 [i|Invalid Request! The query parameter '#{k}' failed to parse: #{e}|] + Right a -> pure (Just a) + getInfoR :: Handler (JSONResponse InfoRes) getInfoR = do name <- getsYesod $ marketplaceName . appSettings @@ -144,6 +156,7 @@ getInfoR = do getEosVersionR :: Handler (JSONResponse (Maybe EosRes)) getEosVersionR = do + eosVersion <- queryParamAs "eos-version" parseVersion allEosVersions <- runDB $ select $ do vers <- from $ table @OsVersion orderBy [desc (vers ^. OsVersionCreatedAt)] @@ -154,6 +167,7 @@ getEosVersionR = do ReleaseNotes $ HM.fromList $ sortOn (Down . fst) + $ filter (maybe (const True) (<) eosVersion . fst) $ (\v -> (osVersionNumber v, osVersionReleaseNotes v)) <$> osV pure . JSONResponse $ mLatest <&> \latest -> EosRes { eosResVersion = osVersionNumber latest