use actix_session::Session;
use actix_web::{web, HttpRequest, HttpResponse};
use serde::Deserialize;
use dbui_core::ResultExt;
use dbui_service::AppConfig;
pub fn detail(session: Session, cfg: web::Data<AppConfig>, key: web::Path<String>, req: HttpRequest) -> HttpResponse {
crate::act(&session, &cfg, &req, |ctx| {
let p = ctx.app().load_project(&key)?;
dbui_templates::project::project_detail::detail(&ctx, &p)
})
}
pub fn options(session: Session, cfg: web::Data<AppConfig>, key: web::Path<String>, req: HttpRequest) -> HttpResponse {
crate::act(&session, &cfg, &req, |ctx| {
let p = ctx.app().load_project(&key)?;
dbui_templates::project::project_options::options(&ctx, &p)
})
}
#[derive(Debug, Deserialize)]
pub struct SqlRequest {
sql: String
}
pub fn test(
session: Session, cfg: web::Data<AppConfig>, sr: web::Query<SqlRequest>, key: web::Path<String>, req: HttpRequest
) -> HttpResponse {
crate::act(&session, &cfg, &req, |ctx| {
let mut conn = ctx.app().open_db(&key)?;
let id = uuid::Uuid::new_v4();
let sql = &sr.sql;
let stmt = conn.prepare(&sql).chain_err(|| format!("Cannot parse query [{}]", key))?;
let start_ms = dbui_core::util::current_time_ms();
let rows = conn.query(&stmt, &[]).chain_err(|| format!("Cannot run query [{}]", key))?;
let duration_ms = (dbui_core::util::current_time_ms() - start_ms) as i32;
let result = dbui_database::from_rows(id, &sql, rows, duration_ms)?;
dbui_templates::sql::results(&ctx, &sql, &result)
})
}