implements release notes filtering

This commit is contained in:
Keagan McClelland
2022-03-30 17:43:58 -06:00
parent 9938913358
commit e5efb877d3

View File

@@ -37,6 +37,9 @@ import Data.Aeson ( decode
) )
import qualified Data.Attoparsec.Text as Atto import qualified Data.Attoparsec.Text as Atto
import Data.Attoparsec.Text ( Parser
, parseOnly
)
import Data.ByteArray.Encoding ( Base(..) import Data.ByteArray.Encoding ( Base(..)
, convertToBase , convertToBase
) )
@@ -116,6 +119,7 @@ import Util.Shared ( filterDependencyBestVersion
, getVersionSpecFromQuery , getVersionSpecFromQuery
) )
import Yesod.Core ( Content(ContentFile) import Yesod.Core ( Content(ContentFile)
, MonadHandler
, MonadResource , MonadResource
, RenderRoute(renderRoute) , RenderRoute(renderRoute)
, TypedContent , TypedContent
@@ -133,6 +137,14 @@ import Yesod.Core.Types ( JSONResponse(..) )
import Yesod.Persist ( YesodDB ) import Yesod.Persist ( YesodDB )
import Yesod.Persist.Core ( YesodPersist(runDB) ) 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 :: Handler (JSONResponse InfoRes)
getInfoR = do getInfoR = do
name <- getsYesod $ marketplaceName . appSettings name <- getsYesod $ marketplaceName . appSettings
@@ -144,6 +156,7 @@ getInfoR = do
getEosVersionR :: Handler (JSONResponse (Maybe EosRes)) getEosVersionR :: Handler (JSONResponse (Maybe EosRes))
getEosVersionR = do getEosVersionR = do
eosVersion <- queryParamAs "eos-version" parseVersion
allEosVersions <- runDB $ select $ do allEosVersions <- runDB $ select $ do
vers <- from $ table @OsVersion vers <- from $ table @OsVersion
orderBy [desc (vers ^. OsVersionCreatedAt)] orderBy [desc (vers ^. OsVersionCreatedAt)]
@@ -154,6 +167,7 @@ getEosVersionR = do
ReleaseNotes ReleaseNotes
$ HM.fromList $ HM.fromList
$ sortOn (Down . fst) $ sortOn (Down . fst)
$ filter (maybe (const True) (<) eosVersion . fst)
$ (\v -> (osVersionNumber v, osVersionReleaseNotes v)) $ (\v -> (osVersionNumber v, osVersionReleaseNotes v))
<$> osV <$> osV
pure . JSONResponse $ mLatest <&> \latest -> EosRes { eosResVersion = osVersionNumber latest pure . JSONResponse $ mLatest <&> \latest -> EosRes { eosResVersion = osVersionNumber latest