default to 030 if eos-version param missing (#130)

This commit is contained in:
Lucy C
2023-01-08 17:06:18 -07:00
committed by GitHub
parent 2ba9b71df6
commit b7155e3139

View File

@@ -20,15 +20,13 @@ import Database.Esqueleto.Experimental (
import Foundation (Handler, RegistryCtx (appSettings))
import Handler.Package.V0.ReleaseNotes (ReleaseNotes (..))
import Handler.Util (queryParamAs, getArchQuery)
import Lib.Types.Emver (Version, parseVersion)
import Lib.Types.Emver (Version (unVersion), Version(Version), parseVersion)
import Model (EntityField (..), OsVersion (..))
import Orphans.Emver ()
import Startlude (Bool (..), Down (..), Eq, Generic, Maybe (..), Ord ((<)), Show, Text, const, filter, fst, head, maybe, pure, sortOn, ($), (&&&), (.), (<$>), (<&>), (<=))
import Yesod (ToContent (toContent), ToTypedContent (..), YesodPersist (runDB), getsYesod, sendResponseStatus)
import Startlude (Down (..), Eq, Generic, Maybe (..), Ord ((<)), Show, Text, filter, fst, head, pure, sortOn, ($), (&&&), (.), (<$>), (<&>), (<=))
import Yesod (ToContent (toContent), ToTypedContent (..), YesodPersist (runDB), getsYesod)
import Yesod.Core.Types (JSONResponse (..))
import Settings (AppSettings(maxEosVersion))
import Network.HTTP.Types (status400)
import Lib.Error (S9Error(InvalidParamsE))
import Lib.Types.Core (OsArch(RASPBERRYPI))
import Data.Maybe (fromMaybe)
@@ -50,34 +48,31 @@ instance ToTypedContent EosRes where
getEosVersionR :: Handler (JSONResponse (Maybe EosRes))
getEosVersionR = do
currentEosVersion <- queryParamAs "eos-version" parseVersion
currentEosVersion <- fromMaybe Version { unVersion = (0,3,0,0) } <$> queryParamAs "eos-version" parseVersion
arch <- fromMaybe RASPBERRYPI <$> getArchQuery
case currentEosVersion of
Nothing -> sendResponseStatus status400 (InvalidParamsE "Param is required" "eos-version")
Just currentEosVersion' -> do
maxVersion <- getsYesod $ maxEosVersion . appSettings
allEosVersions <- runDB $
select $ do
vers <- from $ table @OsVersion
where_ (vers ^. OsVersionArch ==. val (Just arch))
orderBy [desc (vers ^. OsVersionNumber)]
pure vers
let osV = determineMaxEosVersionAvailable maxVersion currentEosVersion' $ entityVal <$> allEosVersions
let mLatest = head osV
let mappedVersions =
ReleaseNotes $
HM.fromList $
sortOn (Down . fst) $
filter (maybe (const True) (<) currentEosVersion . fst) $
((osVersionNumber &&& osVersionReleaseNotes))
<$> osV
pure . JSONResponse $
mLatest <&> \latest ->
EosRes
{ eosResVersion = osVersionNumber latest
, eosResHeadline = osVersionHeadline latest
, eosResReleaseNotes = mappedVersions
}
maxVersion <- getsYesod $ maxEosVersion . appSettings
allEosVersions <- runDB $
select $ do
vers <- from $ table @OsVersion
where_ (vers ^. OsVersionArch ==. val (Just arch))
orderBy [desc (vers ^. OsVersionNumber)]
pure vers
let osV = determineMaxEosVersionAvailable maxVersion currentEosVersion $ entityVal <$> allEosVersions
let mLatest = head osV
let mappedVersions =
ReleaseNotes $
HM.fromList $
sortOn (Down . fst) $
filter ((<) currentEosVersion . fst) $
((osVersionNumber &&& osVersionReleaseNotes))
<$> osV
pure . JSONResponse $
mLatest <&> \latest ->
EosRes
{ eosResVersion = osVersionNumber latest
, eosResHeadline = osVersionHeadline latest
, eosResReleaseNotes = mappedVersions
}
determineMaxEosVersionAvailable :: Version -> Version -> [OsVersion] -> [OsVersion]
determineMaxEosVersionAvailable maxEosVersion currentEosVersion versions = do