use actix_web::HttpResponse;
use sqlx::{Pool, Postgres};
use super::super::catalog_errors::schema_processed_query_error;
use super::super::catalog_service_loader::load_schema_overview_rows;
use super::super::presentation::schema_overview as build_schema_overview_payload;
use super::super::schema_backend::SchemaBackend;
pub(in super::super) async fn schema_overview_response(
backend: &SchemaBackend,
app_state: &crate::AppState,
schema_name: String,
) -> HttpResponse {
match backend {
SchemaBackend::Postgres { pool } => {
let overview_rows = match load_schema_overview_rows(pool, schema_name.as_str()).await {
Ok(rows) => rows,
Err(err) => return schema_processed_query_error(&err, Some(schema_name.as_str())),
};
HttpResponse::Ok().json(build_schema_overview_payload(
schema_name,
overview_rows.relations,
overview_rows.columns,
))
}
SchemaBackend::D1 { connection_info } => {
match super::super::schema_d1::load_schema_overview_rows(
app_state,
connection_info,
schema_name.as_str(),
)
.await
{
Ok(rows) => HttpResponse::Ok().json(build_schema_overview_payload(
schema_name,
rows.relations,
rows.columns,
)),
Err(resp) => resp,
}
}
}
}