mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-02 11:13:29 +00:00
[ENG-1709] Smarter params merging in search api (#2346)
do smarter params merging in search api
This commit is contained in:
parent
029250e1b2
commit
e4dd2b73ec
|
@ -63,35 +63,17 @@ pub enum SearchFilterArgs {
|
|||
}
|
||||
|
||||
impl SearchFilterArgs {
|
||||
async fn into_params<T>(
|
||||
async fn into_params(
|
||||
self,
|
||||
db: &PrismaClient,
|
||||
file_path: fn(Vec<prisma::file_path::WhereParam>) -> Vec<T>,
|
||||
object: fn(Vec<prisma::object::WhereParam>) -> Vec<T>,
|
||||
) -> Result<Vec<T>, rspc::Error> {
|
||||
file_path: &mut Vec<prisma::file_path::WhereParam>,
|
||||
object: &mut Vec<prisma::object::WhereParam>,
|
||||
) -> Result<(), rspc::Error> {
|
||||
Ok(match self {
|
||||
Self::FilePath(v) => file_path(v.into_params(db).await?),
|
||||
Self::Object(v) => object(v.into_params()),
|
||||
Self::FilePath(v) => file_path.extend(v.into_params(db).await?),
|
||||
Self::Object(v) => object.extend(v.into_params()),
|
||||
})
|
||||
}
|
||||
|
||||
async fn into_file_path_params(
|
||||
self,
|
||||
db: &PrismaClient,
|
||||
) -> Result<Vec<prisma::file_path::WhereParam>, rspc::Error> {
|
||||
self.into_params(db, |v| v, |v| vec![prisma::file_path::object::is(v)])
|
||||
.await
|
||||
}
|
||||
|
||||
async fn into_object_params(
|
||||
self,
|
||||
db: &PrismaClient,
|
||||
) -> Result<Vec<prisma::object::WhereParam>, rspc::Error> {
|
||||
dbg!(
|
||||
self.into_params(db, |v| vec![prisma::object::file_paths::some(v)], |v| v)
|
||||
.await
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn mount() -> AlphaRouter<Ctx> {
|
||||
|
@ -305,13 +287,11 @@ pub fn mount() -> AlphaRouter<Ctx> {
|
|||
let Library { db, .. } = library.as_ref();
|
||||
|
||||
let params = {
|
||||
let mut params = Vec::new();
|
||||
let (mut fp, obj) = merge_filters(filters, db).await?;
|
||||
|
||||
for filter in filters {
|
||||
params.extend(filter.into_file_path_params(db).await?);
|
||||
}
|
||||
fp.push(prisma::file_path::object::is(obj));
|
||||
|
||||
params
|
||||
fp
|
||||
};
|
||||
|
||||
let mut query = db.file_path().find_many(params);
|
||||
|
@ -384,13 +364,11 @@ pub fn mount() -> AlphaRouter<Ctx> {
|
|||
Ok(db
|
||||
.file_path()
|
||||
.count({
|
||||
let mut params = Vec::new();
|
||||
let (mut fp, obj) = merge_filters(filters, db).await?;
|
||||
|
||||
for filter in filters {
|
||||
params.extend(filter.into_file_path_params(db).await?);
|
||||
}
|
||||
fp.push(prisma::file_path::object::is(obj));
|
||||
|
||||
params
|
||||
fp
|
||||
})
|
||||
.exec()
|
||||
.await? as u32)
|
||||
|
@ -421,13 +399,11 @@ pub fn mount() -> AlphaRouter<Ctx> {
|
|||
let mut query = db
|
||||
.object()
|
||||
.find_many({
|
||||
let mut params = Vec::new();
|
||||
let (fp, mut obj) = merge_filters(filters, db).await?;
|
||||
|
||||
for filter in filters {
|
||||
params.extend(filter.into_object_params(db).await?);
|
||||
}
|
||||
obj.push(prisma::object::file_paths::some(fp));
|
||||
|
||||
params
|
||||
obj
|
||||
})
|
||||
.take(take as i64);
|
||||
|
||||
|
@ -504,13 +480,11 @@ pub fn mount() -> AlphaRouter<Ctx> {
|
|||
Ok(db
|
||||
.object()
|
||||
.count({
|
||||
let mut params = Vec::new();
|
||||
let (fp, mut obj) = merge_filters(filters, db).await?;
|
||||
|
||||
for filter in filters {
|
||||
params.extend(filter.into_object_params(db).await?);
|
||||
}
|
||||
obj.push(prisma::object::file_paths::some(fp));
|
||||
|
||||
params
|
||||
obj
|
||||
})
|
||||
.exec()
|
||||
.await? as u32)
|
||||
|
@ -518,3 +492,23 @@ pub fn mount() -> AlphaRouter<Ctx> {
|
|||
})
|
||||
.merge("saved.", saved::mount())
|
||||
}
|
||||
|
||||
async fn merge_filters(
|
||||
filters: Vec<SearchFilterArgs>,
|
||||
db: &PrismaClient,
|
||||
) -> Result<
|
||||
(
|
||||
Vec<prisma::file_path::WhereParam>,
|
||||
Vec<prisma::object::WhereParam>,
|
||||
),
|
||||
rspc::Error,
|
||||
> {
|
||||
let mut obj = vec![];
|
||||
let mut fp = vec![];
|
||||
|
||||
for filter in filters {
|
||||
filter.into_params(db, &mut fp, &mut obj).await?;
|
||||
}
|
||||
|
||||
Ok((fp, obj))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue