use sqlx::PgPool;
use std::sync::Arc;
use uuid::Uuid;
use super::scope::SavedViewLookup;
use kyma_catalog::saved_views;
pub struct CatalogSavedViewLookup {
pub pool: Arc<PgPool>,
pub tenant_id: Uuid,
pub owner_subject: String,
}
#[async_trait::async_trait]
impl SavedViewLookup for CatalogSavedViewLookup {
async fn load_sources(&self, view_id: &str) -> Result<Option<Vec<String>>, String> {
let parsed = match Uuid::parse_str(view_id) {
Ok(u) => u,
Err(_) => return Ok(None),
};
match saved_views::get(&self.pool, self.tenant_id, &self.owner_subject, parsed).await {
Ok(v) => Ok(Some(v.sources)),
Err(saved_views::SavedViewError::NotFound) => Ok(None),
Err(e) => Err(e.to_string()),
}
}
}