1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
use actix_session::Session; use actix_web::{web, HttpRequest, HttpResponse}; use serde::Deserialize; use dbui_core::cfg::AppConfig; use dbui_core::ResultExt; pub fn list(session: Session, cfg: web::Data<AppConfig>, req: HttpRequest) -> HttpResponse { crate::act(&session, &cfg, &req, |ctx| { let p = ctx.app().projects().read().expect("Can't lock project service!").get_all()?; dbui_templates::project::project_list::list(&ctx, p) }) } 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().projects().read().expect("Can't lock project service!").get(&key)?; dbui_templates::project::project_detail::detail(&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 p = ctx.app().projects().read().expect("Can't lock project service!").get(&key)?; let params = p.connection_params(); let pool = dbui_database::conn::ConnectionPool::new(params)?; let mut conn = pool.open()?; let sql = &sr.sql; let stmt = conn.prepare(&sql).chain_err(|| format!("Cannot parse query [{}]", key))?; let rows = conn.query(&stmt, &[]).chain_err(|| format!("Cannot run query [{}]", key))?; let result = dbui_database::results::from_rows(&sql, rows)?; dbui_templates::sql::results(&ctx, &sql, &result) }) }