default to raspberrypi if arch does not exit

This commit is contained in:
Lucy Cifferello
2022-12-19 11:16:27 -05:00
parent 487bb97170
commit 2ba9b71df6

View File

@@ -23,12 +23,14 @@ import Handler.Util (queryParamAs, getArchQuery)
import Lib.Types.Emver (Version, parseVersion) import Lib.Types.Emver (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 (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 Yesod (ToContent (toContent), ToTypedContent (..), YesodPersist (runDB), getsYesod, sendResponseStatus)
import Yesod.Core.Types (JSONResponse (..)) import Yesod.Core.Types (JSONResponse (..))
import Settings (AppSettings(maxEosVersion)) import Settings (AppSettings(maxEosVersion))
import Network.HTTP.Types (status400) import Network.HTTP.Types (status400)
import Lib.Error (S9Error(InvalidParamsE)) import Lib.Error (S9Error(InvalidParamsE))
import Lib.Types.Core (OsArch(RASPBERRYPI))
import Data.Maybe (fromMaybe)
data EosRes = EosRes data EosRes = EosRes
@@ -49,35 +51,33 @@ instance ToTypedContent EosRes where
getEosVersionR :: Handler (JSONResponse (Maybe EosRes)) getEosVersionR :: Handler (JSONResponse (Maybe EosRes))
getEosVersionR = do getEosVersionR = do
currentEosVersion <- queryParamAs "eos-version" parseVersion currentEosVersion <- queryParamAs "eos-version" parseVersion
getArchQuery >>= \case arch <- fromMaybe RASPBERRYPI <$> getArchQuery
Nothing -> sendResponseStatus status400 (InvalidParamsE "Param is required" "arch") case currentEosVersion of
Just arch -> do Nothing -> sendResponseStatus status400 (InvalidParamsE "Param is required" "eos-version")
case currentEosVersion of Just currentEosVersion' -> do
Nothing -> sendResponseStatus status400 (InvalidParamsE "Param is required" "eos-version") maxVersion <- getsYesod $ maxEosVersion . appSettings
Just currentEosVersion' -> do allEosVersions <- runDB $
maxVersion <- getsYesod $ maxEosVersion . appSettings select $ do
allEosVersions <- runDB $ vers <- from $ table @OsVersion
select $ do where_ (vers ^. OsVersionArch ==. val (Just arch))
vers <- from $ table @OsVersion orderBy [desc (vers ^. OsVersionNumber)]
where_ (vers ^. OsVersionArch ==. val (Just arch)) pure vers
orderBy [desc (vers ^. OsVersionNumber)] let osV = determineMaxEosVersionAvailable maxVersion currentEosVersion' $ entityVal <$> allEosVersions
pure vers let mLatest = head osV
let osV = determineMaxEosVersionAvailable maxVersion currentEosVersion' $ entityVal <$> allEosVersions let mappedVersions =
let mLatest = head osV ReleaseNotes $
let mappedVersions = HM.fromList $
ReleaseNotes $ sortOn (Down . fst) $
HM.fromList $ filter (maybe (const True) (<) currentEosVersion . fst) $
sortOn (Down . fst) $ ((osVersionNumber &&& osVersionReleaseNotes))
filter (maybe (const True) (<) currentEosVersion . fst) $ <$> osV
((osVersionNumber &&& osVersionReleaseNotes)) pure . JSONResponse $
<$> osV mLatest <&> \latest ->
pure . JSONResponse $ EosRes
mLatest <&> \latest -> { eosResVersion = osVersionNumber latest
EosRes , eosResHeadline = osVersionHeadline latest
{ eosResVersion = osVersionNumber latest , eosResReleaseNotes = mappedVersions
, 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