mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-30 19:54:47 +00:00
not ideal but functional solution for backwards compatible arch filter
This commit is contained in:
@@ -125,35 +125,60 @@ serviceQuerySource ::
|
|||||||
Text ->
|
Text ->
|
||||||
Maybe OsArch ->
|
Maybe OsArch ->
|
||||||
ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
|
ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
|
||||||
serviceQuerySource mCat query osArch = selectSource $ do
|
serviceQuerySource mCat query mOsArch = selectSource $ do
|
||||||
service <- case mCat of
|
case mOsArch of
|
||||||
|
Just osArch -> do
|
||||||
|
service <- case mCat of
|
||||||
|
Nothing -> do
|
||||||
|
(service :& vp) <- from $ table @VersionRecord
|
||||||
|
`innerJoin` table @VersionPlatform `on` (\(service :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
||||||
|
where_ (service ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
||||||
|
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
||||||
|
where_ $ queryInMetadata query service
|
||||||
|
pure service
|
||||||
|
Just category -> do
|
||||||
|
(service :& _ :& cat :& vp) <-
|
||||||
|
from $
|
||||||
|
table @VersionRecord
|
||||||
|
`innerJoin` table @PkgCategory `on` (VersionRecordPkgId === PkgCategoryPkgId)
|
||||||
|
`innerJoin` table @Category `on` (\(_ :& a :& b) -> (PkgCategoryCategoryId === CategoryId) (a :& b))
|
||||||
|
`innerJoin` table @VersionPlatform `on` (\(service :& _ :& _ :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
||||||
|
-- if there is a cateogry, only search in category
|
||||||
|
-- weight title, short, long (bitcoin should equal Bitcoin Core)
|
||||||
|
where_ $ cat ^. CategoryName ==. val category &&. queryInMetadata query service
|
||||||
|
where_ (service ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
||||||
|
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
||||||
|
pure service
|
||||||
|
groupBy (service ^. VersionRecordPkgId, service ^. VersionRecordNumber)
|
||||||
|
orderBy
|
||||||
|
[ asc (service ^. VersionRecordPkgId)
|
||||||
|
, desc (service ^. VersionRecordNumber)
|
||||||
|
, desc (service ^. VersionRecordUpdatedAt)
|
||||||
|
]
|
||||||
|
pure service
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
(service :& vp) <- from $ table @VersionRecord
|
service <- case mCat of
|
||||||
`innerJoin` table @VersionPlatform `on` (\(service :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
Nothing -> do
|
||||||
where_ (service ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
service <- from $ table @VersionRecord
|
||||||
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
where_ $ queryInMetadata query service
|
||||||
where_ $ queryInMetadata query service
|
pure service
|
||||||
|
Just category -> do
|
||||||
|
(service :& _ :& cat) <-
|
||||||
|
from $
|
||||||
|
table @VersionRecord
|
||||||
|
`innerJoin` table @PkgCategory `on` (VersionRecordPkgId === PkgCategoryPkgId)
|
||||||
|
`innerJoin` table @Category `on` (\(_ :& a :& b) -> (PkgCategoryCategoryId === CategoryId) (a :& b))
|
||||||
|
-- if there is a cateogry, only search in category
|
||||||
|
-- weight title, short, long (bitcoin should equal Bitcoin Core)
|
||||||
|
where_ $ cat ^. CategoryName ==. val category &&. queryInMetadata query service
|
||||||
|
pure service
|
||||||
|
groupBy (service ^. VersionRecordPkgId, service ^. VersionRecordNumber)
|
||||||
|
orderBy
|
||||||
|
[ asc (service ^. VersionRecordPkgId)
|
||||||
|
, desc (service ^. VersionRecordNumber)
|
||||||
|
, desc (service ^. VersionRecordUpdatedAt)
|
||||||
|
]
|
||||||
pure service
|
pure service
|
||||||
Just category -> do
|
|
||||||
(service :& _ :& cat :& vp) <-
|
|
||||||
from $
|
|
||||||
table @VersionRecord
|
|
||||||
`innerJoin` table @PkgCategory `on` (VersionRecordPkgId === PkgCategoryPkgId)
|
|
||||||
`innerJoin` table @Category `on` (\(_ :& a :& b) -> (PkgCategoryCategoryId === CategoryId) (a :& b))
|
|
||||||
`innerJoin` table @VersionPlatform `on` (\(service :& _ :& _ :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
|
||||||
-- if there is a cateogry, only search in category
|
|
||||||
-- weight title, short, long (bitcoin should equal Bitcoin Core)
|
|
||||||
where_ $ cat ^. CategoryName ==. val category &&. queryInMetadata query service
|
|
||||||
where_ (service ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
|
||||||
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
|
||||||
pure service
|
|
||||||
groupBy (service ^. VersionRecordPkgId, service ^. VersionRecordNumber)
|
|
||||||
orderBy
|
|
||||||
[ asc (service ^. VersionRecordPkgId)
|
|
||||||
, desc (service ^. VersionRecordNumber)
|
|
||||||
, desc (service ^. VersionRecordUpdatedAt)
|
|
||||||
]
|
|
||||||
pure service
|
|
||||||
|
|
||||||
queryInMetadata :: Text -> SqlExpr (Entity VersionRecord) -> (SqlExpr (Value Bool))
|
queryInMetadata :: Text -> SqlExpr (Entity VersionRecord) -> (SqlExpr (Value Bool))
|
||||||
queryInMetadata query service =
|
queryInMetadata query service =
|
||||||
@@ -163,13 +188,19 @@ queryInMetadata query service =
|
|||||||
|
|
||||||
|
|
||||||
getPkgDataSource :: (MonadResource m, MonadIO m) => [PkgId] -> Maybe OsArch -> ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
|
getPkgDataSource :: (MonadResource m, MonadIO m) => [PkgId] -> Maybe OsArch -> ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
|
||||||
getPkgDataSource pkgs osArch = selectSource $ do
|
getPkgDataSource pkgs mOsArch = selectSource $ do
|
||||||
(pkgData :& vp) <- from $ table @VersionRecord
|
case mOsArch of
|
||||||
`innerJoin` table @VersionPlatform `on` (\(service :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
Just osArch -> do
|
||||||
where_ (pkgData ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
(pkgData :& vp) <- from $ table @VersionRecord
|
||||||
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
`innerJoin` table @VersionPlatform `on` (\(service :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
|
||||||
where_ (pkgData ^. VersionRecordPkgId `in_` valList (PkgRecordKey <$> pkgs))
|
where_ (pkgData ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
|
||||||
pure pkgData
|
where_ (vp ^. VersionPlatformArch ==. val osArch)
|
||||||
|
where_ (pkgData ^. VersionRecordPkgId `in_` valList (PkgRecordKey <$> pkgs))
|
||||||
|
pure pkgData
|
||||||
|
Nothing -> do
|
||||||
|
pkgData <- from $ table @VersionRecord
|
||||||
|
where_ (pkgData ^. VersionRecordPkgId `in_` valList (PkgRecordKey <$> pkgs))
|
||||||
|
pure pkgData
|
||||||
|
|
||||||
|
|
||||||
getPkgDependencyData ::
|
getPkgDependencyData ::
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ VersionPlatform
|
|||||||
updatedAt UTCTime Maybe
|
updatedAt UTCTime Maybe
|
||||||
pkgId PkgRecordId
|
pkgId PkgRecordId
|
||||||
versionNumber Version
|
versionNumber Version
|
||||||
arch OsArch Maybe
|
arch OsArch
|
||||||
Primary pkgId versionNumber
|
Primary pkgId versionNumber
|
||||||
deriving Eq
|
deriving Eq
|
||||||
deriving Show
|
deriving Show
|
||||||
|
|||||||
Reference in New Issue
Block a user