mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
synchronize with 0.3.0 branch
This commit is contained in:
committed by
Keagan McClelland
parent
16251afd35
commit
6fc7431930
@@ -23,7 +23,6 @@ searchServices Nothing pageItems offset' query = select $ do
|
|||||||
( (service ^. SAppDescShort `ilike` (%) ++. val query ++. (%))
|
( (service ^. SAppDescShort `ilike` (%) ++. val query ++. (%))
|
||||||
||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%))
|
||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%))
|
||||||
||. (service ^. SAppTitle `ilike` (%) ++. val query ++. (%))
|
||. (service ^. SAppTitle `ilike` (%) ++. val query ++. (%))
|
||||||
||. (service ^. SAppAppId `ilike` (%) ++. val query ++. (%))
|
|
||||||
)
|
)
|
||||||
orderBy [desc (service ^. SAppUpdatedAt)]
|
orderBy [desc (service ^. SAppUpdatedAt)]
|
||||||
limit pageItems
|
limit pageItems
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ getIconsR appId = do
|
|||||||
spec <- getVersionFromQuery appsDir ext >>= \case
|
spec <- getVersionFromQuery appsDir ext >>= \case
|
||||||
Nothing -> sendResponseStatus status404 ("Specified App Version Not Found" :: Text)
|
Nothing -> sendResponseStatus status404 ("Specified App Version Not Found" :: Text)
|
||||||
Just v -> pure v
|
Just v -> pure v
|
||||||
let appDir = (<> "/") . (</> show spec) . (</> toS appId) $ appsDir
|
let appDir = (<> "/") . (</> show spec) . (</> show appId) $ appsDir
|
||||||
manifest' <- handleS9ErrT $ getManifest appMgrDir appDir ext
|
manifest' <- handleS9ErrT $ getManifest appMgrDir appDir ext
|
||||||
manifest <- case eitherDecode manifest' of
|
manifest <- case eitherDecode manifest' of
|
||||||
Left e -> do
|
Left e -> do
|
||||||
@@ -65,7 +65,7 @@ getIconsR appId = do
|
|||||||
-- (_, Just hout, _, _) <- liftIO (createProcess $ iconBs { std_out = CreatePipe })
|
-- (_, Just hout, _, _) <- liftIO (createProcess $ iconBs { std_out = CreatePipe })
|
||||||
-- respondSource typePlain (runConduit $ yieldMany () [iconBs])
|
-- respondSource typePlain (runConduit $ yieldMany () [iconBs])
|
||||||
-- respondSource typePlain $ sourceHandle hout .| awaitForever sendChunkBS
|
-- respondSource typePlain $ sourceHandle hout .| awaitForever sendChunkBS
|
||||||
where ext = Extension (toS appId) :: Extension "s9pk"
|
where ext = Extension (show appId) :: Extension "s9pk"
|
||||||
|
|
||||||
getLicenseR :: AppIdentifier -> Handler TypedContent
|
getLicenseR :: AppIdentifier -> Handler TypedContent
|
||||||
getLicenseR appId = do
|
getLicenseR appId = do
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import Startlude hiding ( Handler
|
|||||||
)
|
)
|
||||||
import System.FilePath.Posix
|
import System.FilePath.Posix
|
||||||
import UnliftIO.Async
|
import UnliftIO.Async
|
||||||
import Util.Shared
|
|
||||||
import Yesod.Core
|
import Yesod.Core
|
||||||
import Yesod.Persist.Core
|
import Yesod.Persist.Core
|
||||||
|
|
||||||
@@ -287,7 +286,7 @@ getPackageListR = do
|
|||||||
query
|
query
|
||||||
let filteredServices' = sAppAppId . entityVal <$> filteredServices
|
let filteredServices' = sAppAppId . entityVal <$> filteredServices
|
||||||
settings <- getsYesod appSettings
|
settings <- getsYesod appSettings
|
||||||
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata $ Just filteredServices'
|
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata
|
||||||
$logInfo $ show packageMetadata
|
$logInfo $ show packageMetadata
|
||||||
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
|
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
|
||||||
(getServiceDetails settings packageMetadata Nothing)
|
(getServiceDetails settings packageMetadata Nothing)
|
||||||
@@ -304,7 +303,7 @@ getPackageListR = do
|
|||||||
-- for each item in list get best available from version range
|
-- for each item in list get best available from version range
|
||||||
settings <- getsYesod appSettings
|
settings <- getsYesod appSettings
|
||||||
-- @TODO fix _ error
|
-- @TODO fix _ error
|
||||||
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata Nothing
|
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata
|
||||||
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
|
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
|
||||||
let (_, availableServices) = partitionEithers availableServicesResult
|
let (_, availableServices) = partitionEithers availableServicesResult
|
||||||
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
|
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
|
||||||
@@ -319,6 +318,21 @@ getPackageListR = do
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -326,18 +340,27 @@ getPackageListR = do
|
|||||||
|
|
||||||
|
|
||||||
where
|
where
|
||||||
getPackageDetails :: MonadIO m => (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> PackageVersion -> m (Either Text ((Maybe Version), AppIdentifier))
|
getPackageDetails :: MonadIO m
|
||||||
|
=> (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
|
||||||
|
-> PackageVersion
|
||||||
|
-> m (Either Text ((Maybe Version), AppIdentifier))
|
||||||
getPackageDetails metadata pv = do
|
getPackageDetails metadata pv = do
|
||||||
let appId = packageVersionId pv
|
let appId = packageVersionId pv
|
||||||
let spec = packageVersionVersion pv
|
let spec = packageVersionVersion pv
|
||||||
pacakgeMetadata <- case HM.lookup appId metadata of
|
pacakgeMetadata <- case HM.lookup appId metadata of
|
||||||
Nothing-> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
|
Nothing -> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
|
||||||
Just m -> pure m
|
Just m -> pure m
|
||||||
-- get best version from VersionRange of dependency
|
-- get best version from VersionRange of dependency
|
||||||
let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
|
let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
|
||||||
let best = getMax <$> foldMap (Just . Max) satisfactory
|
let best = getMax <$> foldMap (Just . Max) satisfactory
|
||||||
case best of
|
case best of
|
||||||
Nothing -> pure $ Left $ "best version could not be found for " <> show appId <> " with spec " <> show spec
|
Nothing ->
|
||||||
|
pure
|
||||||
|
$ Left
|
||||||
|
$ "best version could not be found for "
|
||||||
|
<> show appId
|
||||||
|
<> " with spec "
|
||||||
|
<> show spec
|
||||||
Just v -> do
|
Just v -> do
|
||||||
pure $ Right (Just v, appId)
|
pure $ Right (Just v, appId)
|
||||||
|
|
||||||
@@ -471,10 +494,8 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
|
|||||||
where_ $ (service ^. SAppAppId ==. val appId) &&. (version ^. SVersionNumber ==. val version')
|
where_ $ (service ^. SAppAppId ==. val appId) &&. (version ^. SVersionNumber ==. val version')
|
||||||
pure (service, version)
|
pure (service, version)
|
||||||
|
|
||||||
fetchPackageMetadata :: MonadUnliftIO m
|
fetchPackageMetadata :: MonadUnliftIO m => ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
|
||||||
=> Maybe [AppIdentifier]
|
fetchPackageMetadata = do
|
||||||
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
|
|
||||||
fetchPackageMetadata ids = do
|
|
||||||
let categoriesQuery = select $ do
|
let categoriesQuery = select $ do
|
||||||
(service :& category) <-
|
(service :& category) <-
|
||||||
from
|
from
|
||||||
@@ -485,8 +506,6 @@ fetchPackageMetadata ids = do
|
|||||||
==. category
|
==. category
|
||||||
?. ServiceCategoryServiceId
|
?. ServiceCategoryServiceId
|
||||||
)
|
)
|
||||||
-- where_ $
|
|
||||||
-- service ^. SAppAppId `in_` valList ids
|
|
||||||
Database.Esqueleto.Experimental.groupBy $ service ^. SAppAppId
|
Database.Esqueleto.Experimental.groupBy $ service ^. SAppAppId
|
||||||
pure (service ^. SAppAppId, arrayAggDistinct (category ?. ServiceCategoryCategoryName))
|
pure (service ^. SAppAppId, arrayAggDistinct (category ?. ServiceCategoryCategoryName))
|
||||||
let versionsQuery = select $ do
|
let versionsQuery = select $ do
|
||||||
@@ -495,8 +514,6 @@ fetchPackageMetadata ids = do
|
|||||||
$ table @SApp
|
$ table @SApp
|
||||||
`innerJoin` table @SVersion
|
`innerJoin` table @SVersion
|
||||||
`on` (\(service :& version) -> (service ^. SAppId) ==. version ^. SVersionAppId)
|
`on` (\(service :& version) -> (service ^. SAppId) ==. version ^. SVersionAppId)
|
||||||
-- where_ $
|
|
||||||
-- service ^. SAppAppId `in_` valList ids
|
|
||||||
orderBy [desc (version ^. SVersionNumber)]
|
orderBy [desc (version ^. SVersionNumber)]
|
||||||
Database.Esqueleto.Experimental.groupBy $ (service ^. SAppAppId, version ^. SVersionNumber)
|
Database.Esqueleto.Experimental.groupBy $ (service ^. SAppAppId, version ^. SVersionNumber)
|
||||||
pure (service ^. SAppAppId, arrayAggDistinct (version ^. SVersionNumber))
|
pure (service ^. SAppAppId, arrayAggDistinct (version ^. SVersionNumber))
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
module Lib.Types.Category where
|
module Lib.Types.Category where
|
||||||
|
|
||||||
import Startlude
|
import Startlude
|
||||||
import Database.Persist.Postgresql
|
import Database.Persist.Postgresql
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Yesod.Core
|
import Yesod.Core
|
||||||
|
|
||||||
data CategoryTitle = FEATURED
|
data CategoryTitle = FEATURED
|
||||||
| BITCOIN
|
| BITCOIN
|
||||||
@@ -45,28 +45,4 @@ instance FromJSON CategoryTitle where
|
|||||||
instance ToContent CategoryTitle where
|
instance ToContent CategoryTitle where
|
||||||
toContent = toContent . toJSON
|
toContent = toContent . toJSON
|
||||||
instance ToTypedContent CategoryTitle where
|
instance ToTypedContent CategoryTitle where
|
||||||
<<<<<<< HEAD
|
|
||||||
toTypedContent = toTypedContent . toJSON
|
toTypedContent = toTypedContent . toJSON
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
instance FromField CategoryTitle where
|
|
||||||
fromField a = fromJSONField a
|
|
||||||
instance FromField [CategoryTitle] where
|
|
||||||
fromField a = fromJSONField a
|
|
||||||
instance ToField [CategoryTitle] where
|
|
||||||
toField a = toJSONField a
|
|
||||||
|
|
||||||
parseCT :: Text -> CategoryTitle
|
|
||||||
parseCT = \case
|
|
||||||
"featured" -> FEATURED
|
|
||||||
"bitcoin" -> BITCOIN
|
|
||||||
"lightning" -> LIGHTNING
|
|
||||||
"data" -> DATA
|
|
||||||
"messaging" -> MESSAGING
|
|
||||||
"social" -> SOCIAL
|
|
||||||
"alt coin" -> ALTCOIN
|
|
||||||
-- _ -> fail "unknown category title"
|
|
||||||
>>>>>>> aggregate query functions
|
|
||||||
=======
|
|
||||||
toTypedContent = toTypedContent . toJSON
|
|
||||||
>>>>>>> clean up
|
|
||||||
|
|||||||
Reference in New Issue
Block a user