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)
  })
}