synchronize with 0.3.0 branch

This commit is contained in:
Lucy Cifferello
2021-09-23 19:40:39 -06:00
committed by Keagan McClelland
parent 16251afd35
commit 6fc7431930
4 changed files with 41 additions and 49 deletions

View File

@@ -23,7 +23,6 @@ searchServices Nothing pageItems offset' query = select $ do
( (service ^. SAppDescShort `ilike` (%) ++. val query ++. (%))
||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%))
||. (service ^. SAppTitle `ilike` (%) ++. val query ++. (%))
||. (service ^. SAppAppId `ilike` (%) ++. val query ++. (%))
)
orderBy [desc (service ^. SAppUpdatedAt)]
limit pageItems

View File

@@ -39,7 +39,7 @@ getIconsR appId = do
spec <- getVersionFromQuery appsDir ext >>= \case
Nothing -> sendResponseStatus status404 ("Specified App Version Not Found" :: Text)
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 <- case eitherDecode manifest' of
Left e -> do
@@ -65,7 +65,7 @@ getIconsR appId = do
-- (_, Just hout, _, _) <- liftIO (createProcess $ iconBs { std_out = CreatePipe })
-- respondSource typePlain (runConduit $ yieldMany () [iconBs])
-- 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 appId = do

View File

@@ -41,7 +41,6 @@ import Startlude hiding ( Handler
)
import System.FilePath.Posix
import UnliftIO.Async
import Util.Shared
import Yesod.Core
import Yesod.Persist.Core
@@ -287,7 +286,7 @@ getPackageListR = do
query
let filteredServices' = sAppAppId . entityVal <$> filteredServices
settings <- getsYesod appSettings
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata $ Just filteredServices'
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata
$logInfo $ show packageMetadata
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
(getServiceDetails settings packageMetadata Nothing)
@@ -304,7 +303,7 @@ getPackageListR = do
-- for each item in list get best available from version range
settings <- getsYesod appSettings
-- @TODO fix _ error
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata Nothing
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
let (_, availableServices) = partitionEithers availableServicesResult
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
@@ -319,6 +318,21 @@ getPackageListR = do
@@ -326,18 +340,27 @@ getPackageListR = do
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
let appId = packageVersionId pv
let spec = packageVersionVersion pv
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
-- get best version from VersionRange of dependency
let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
let best = getMax <$> foldMap (Just . Max) satisfactory
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
pure $ Right (Just v, appId)
@@ -471,10 +494,8 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
where_ $ (service ^. SAppAppId ==. val appId) &&. (version ^. SVersionNumber ==. val version')
pure (service, version)
fetchPackageMetadata :: MonadUnliftIO m
=> Maybe [AppIdentifier]
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
fetchPackageMetadata ids = do
fetchPackageMetadata :: MonadUnliftIO m => ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
fetchPackageMetadata = do
let categoriesQuery = select $ do
(service :& category) <-
from
@@ -485,8 +506,6 @@ fetchPackageMetadata ids = do
==. category
?. ServiceCategoryServiceId
)
-- where_ $
-- service ^. SAppAppId `in_` valList ids
Database.Esqueleto.Experimental.groupBy $ service ^. SAppAppId
pure (service ^. SAppAppId, arrayAggDistinct (category ?. ServiceCategoryCategoryName))
let versionsQuery = select $ do
@@ -495,8 +514,6 @@ fetchPackageMetadata ids = do
$ table @SApp
`innerJoin` table @SVersion
`on` (\(service :& version) -> (service ^. SAppId) ==. version ^. SVersionAppId)
-- where_ $
-- service ^. SAppAppId `in_` valList ids
orderBy [desc (version ^. SVersionNumber)]
Database.Esqueleto.Experimental.groupBy $ (service ^. SAppAppId, version ^. SVersionNumber)
pure (service ^. SAppAppId, arrayAggDistinct (version ^. SVersionNumber))

View File

@@ -45,28 +45,4 @@ instance FromJSON CategoryTitle where
instance ToContent CategoryTitle where
toContent = toContent . toJSON
instance ToTypedContent CategoryTitle where
<<<<<<< HEAD
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