From b7155e3139ec6cc9f5ae6fc3fb4dbea0fb0a1198 Mon Sep 17 00:00:00 2001 From: Lucy C <12953208+elvece@users.noreply.github.com> Date: Sun, 8 Jan 2023 17:06:18 -0700 Subject: [PATCH] default to 030 if eos-version param missing (#130) --- src/Handler/Eos/V0/Latest.hs | 59 +++++++++++++++++------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/Handler/Eos/V0/Latest.hs b/src/Handler/Eos/V0/Latest.hs index 4c1dbb5..8d44a14 100644 --- a/src/Handler/Eos/V0/Latest.hs +++ b/src/Handler/Eos/V0/Latest.hs @@ -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