mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
* filter packages for os compatibility before fetching metadata * address PR feedback and add os filtering to get package latest version endpoint * additional test suite data * filter empty version sets * attempt to fix leak Co-authored-by: Keagan McClelland <keagan.mcclelland@gmail.com>
63 lines
1.7 KiB
Haskell
63 lines
1.7 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
|
|
module Handler.Package.V0.ReleaseNotes where
|
|
|
|
import Data.Aeson (
|
|
KeyValue ((.=)),
|
|
ToJSON (..),
|
|
object,
|
|
)
|
|
import Data.Aeson.Key (fromText)
|
|
import Data.HashMap.Strict (HashMap)
|
|
import Data.HashMap.Strict qualified as HM
|
|
import Foundation (Handler)
|
|
import Handler.Package.V1.Index (getOsVersionQuery)
|
|
import Handler.Util (fetchCompatiblePkgVersions)
|
|
import Lib.Types.Core (PkgId)
|
|
import Lib.Types.Emver (Version)
|
|
import Model (VersionRecord (..))
|
|
import Startlude (
|
|
Down (..),
|
|
Eq,
|
|
Show,
|
|
Text,
|
|
fst,
|
|
pure,
|
|
show,
|
|
sortOn,
|
|
($),
|
|
(&&&),
|
|
(.),
|
|
(<$>),
|
|
)
|
|
import Yesod (
|
|
ToContent (..),
|
|
ToTypedContent (..),
|
|
)
|
|
|
|
|
|
newtype ReleaseNotes = ReleaseNotes {unReleaseNotes :: HashMap Version Text}
|
|
deriving (Eq, Show)
|
|
instance ToJSON ReleaseNotes where
|
|
toJSON ReleaseNotes{..} =
|
|
object [version .= value | (key, value) <- HM.toList unReleaseNotes, let version = fromText $ show key]
|
|
instance ToContent ReleaseNotes where
|
|
toContent = toContent . toJSON
|
|
instance ToTypedContent ReleaseNotes where
|
|
toTypedContent = toTypedContent . toJSON
|
|
|
|
|
|
getReleaseNotesR :: PkgId -> Handler ReleaseNotes
|
|
getReleaseNotesR pkg = do
|
|
osVersion <- getOsVersionQuery
|
|
osCompatibleVersions <- fetchCompatiblePkgVersions osVersion pkg
|
|
pure $ constructReleaseNotesApiRes osCompatibleVersions
|
|
where
|
|
constructReleaseNotesApiRes :: [VersionRecord] -> ReleaseNotes
|
|
constructReleaseNotesApiRes vers = do
|
|
ReleaseNotes $
|
|
HM.fromList $
|
|
sortOn (Down . fst) $
|
|
(versionRecordNumber &&& versionRecordReleaseNotes)
|
|
<$> vers
|