forked from github-starred/komodo
97 lines
2.0 KiB
Rust
97 lines
2.0 KiB
Rust
use anyhow::Context;
|
|
use komodo_client::{
|
|
api::read::*,
|
|
entities::{
|
|
builder::{Builder, BuilderListItem},
|
|
permission::PermissionLevel,
|
|
},
|
|
};
|
|
use mongo_indexed::Document;
|
|
use mungos::mongodb::bson::doc;
|
|
use resolver_api::Resolve;
|
|
|
|
use crate::{
|
|
helpers::query::get_all_tags, resource, state::db_client,
|
|
};
|
|
|
|
use super::ReadArgs;
|
|
|
|
impl Resolve<ReadArgs> for GetBuilder {
|
|
async fn resolve(
|
|
self,
|
|
ReadArgs { user }: &ReadArgs,
|
|
) -> serror::Result<Builder> {
|
|
Ok(
|
|
resource::get_check_permissions::<Builder>(
|
|
&self.builder,
|
|
user,
|
|
PermissionLevel::Read,
|
|
)
|
|
.await?,
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Resolve<ReadArgs> for ListBuilders {
|
|
async fn resolve(
|
|
self,
|
|
ReadArgs { user }: &ReadArgs,
|
|
) -> serror::Result<Vec<BuilderListItem>> {
|
|
let all_tags = if self.query.tags.is_empty() {
|
|
vec![]
|
|
} else {
|
|
get_all_tags(None).await?
|
|
};
|
|
Ok(
|
|
resource::list_for_user::<Builder>(self.query, user, &all_tags)
|
|
.await?,
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Resolve<ReadArgs> for ListFullBuilders {
|
|
async fn resolve(
|
|
self,
|
|
ReadArgs { user }: &ReadArgs,
|
|
) -> serror::Result<ListFullBuildersResponse> {
|
|
let all_tags = if self.query.tags.is_empty() {
|
|
vec![]
|
|
} else {
|
|
get_all_tags(None).await?
|
|
};
|
|
Ok(
|
|
resource::list_full_for_user::<Builder>(
|
|
self.query, user, &all_tags,
|
|
)
|
|
.await?,
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Resolve<ReadArgs> for GetBuildersSummary {
|
|
async fn resolve(
|
|
self,
|
|
ReadArgs { user }: &ReadArgs,
|
|
) -> serror::Result<GetBuildersSummaryResponse> {
|
|
let query = match resource::get_resource_object_ids_for_user::<
|
|
Builder,
|
|
>(user)
|
|
.await?
|
|
{
|
|
Some(ids) => doc! {
|
|
"_id": { "$in": ids }
|
|
},
|
|
None => Document::new(),
|
|
};
|
|
let total = db_client()
|
|
.builders
|
|
.count_documents(query)
|
|
.await
|
|
.context("failed to count all builder documents")?;
|
|
let res = GetBuildersSummaryResponse {
|
|
total: total as u32,
|
|
};
|
|
Ok(res)
|
|
}
|
|
}
|