use anyhow::Context; use mongo_indexed::Document; use monitor_client::{ api::read::*, entities::{ alerter::{Alerter, AlerterListItem}, permission::PermissionLevel, user::User, }, }; use mungos::mongodb::bson::doc; use resolver_api::Resolve; use crate::{ resource, state::{db_client, State}, }; impl Resolve for State { async fn resolve( &self, GetAlerter { alerter }: GetAlerter, user: User, ) -> anyhow::Result { resource::get_check_permissions::( &alerter, &user, PermissionLevel::Read, ) .await } } impl Resolve for State { async fn resolve( &self, ListAlerters { query }: ListAlerters, user: User, ) -> anyhow::Result> { resource::list_for_user::(query, &user).await } } impl Resolve for State { async fn resolve( &self, ListFullAlerters { query }: ListFullAlerters, user: User, ) -> anyhow::Result { resource::list_full_for_user::(query, &user).await } } impl Resolve for State { async fn resolve( &self, GetAlertersSummary {}: GetAlertersSummary, user: User, ) -> anyhow::Result { let query = match resource::get_resource_ids_for_user::(&user) .await? { Some(ids) => doc! { "_id": { "$in": ids } }, None => Document::new(), }; let total = db_client() .await .alerters .count_documents(query) .await .context("failed to count all alerter documents")?; let res = GetAlertersSummaryResponse { total: total as u32, }; Ok(res) } }