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