mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
default to 030 if eos-version param missing (#130)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user