diff --git a/src/Handler/Package/Api.hs b/src/Handler/Package/Api.hs index cb8f948..7804b86 100644 --- a/src/Handler/Package/Api.hs +++ b/src/Handler/Package/Api.hs @@ -25,8 +25,10 @@ import Startlude ( (&), (.), (<$>), + UTCTime, ) import Yesod +import Data.Time.Format.ISO8601 (iso8601Show) dataUrl :: (ContentType, ByteString) -> Text @@ -48,6 +50,7 @@ data PackageRes = PackageRes , packageResLicense :: !Text , packageResVersions :: !(NonEmpty Version) , packageResDependencies :: !(HashMap PkgId DependencyRes) + , packageResPublishedAt :: !UTCTime } deriving (Show, Generic) @@ -66,6 +69,7 @@ instance ApiResponse PackageRes where , "categories" .= packageResCategories , "versions" .= packageResVersions , "dependency-metadata" .= (apiEncode v <$> packageResDependencies) + , "published-at" .= (iso8601Show packageResPublishedAt) ] diff --git a/src/Handler/Package/V1/Index.hs b/src/Handler/Package/V1/Index.hs index ef42c8c..e3ef78d 100644 --- a/src/Handler/Package/V1/Index.hs +++ b/src/Handler/Package/V1/Index.hs @@ -63,6 +63,7 @@ import Startlude ( fromMaybe, headMay, id, + liftA2, mappend, maximumOn, nonEmpty, @@ -216,6 +217,8 @@ constructPackageListApiRes PackageMetadata{..} dependencies = do let pkgCategories = packageMetadataPkgCategories let pkgVersions = packageMetadataPkgVersionRecords let pkgVersion = packageMetadataPkgVersion + -- get the version record for the version being returned - the version will always be in this list ie. it will always be not empty + let versionRecord = NE.head $ NE.fromList $ NE.filter (\v -> versionRecordNumber v == pkgVersion) pkgVersions manifest <- flip runReaderT settings $ (snd <$> getManifest pkgId pkgVersion) >>= \bs -> @@ -230,6 +233,7 @@ constructPackageListApiRes PackageMetadata{..} dependencies = do , packageResLicense = basicRender $ LicenseR V0 pkgId , packageResVersions = versionRecordNumber <$> pkgVersions , packageResDependencies = dependencies + , packageResPublishedAt = ((liftA2 fromMaybe) versionRecordCreatedAt versionRecordUpdatedAt) versionRecord }