|
|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
use actix_web::http::header::ContentType;
|
|
|
|
|
use actix_web::web::Query;
|
|
|
|
|
use actix_web::{get, put, Responder};
|
|
|
|
|
use actix_web::{web, HttpResponse};
|
|
|
|
|
use serde::Deserialize;
|
|
|
|
|
@ -12,36 +13,49 @@ use crate::db;
|
|
|
|
|
#[derive(Template)]
|
|
|
|
|
#[template(path = "page.html")]
|
|
|
|
|
pub struct PageTemplate {
|
|
|
|
|
pub name: String,
|
|
|
|
|
pub root: String,
|
|
|
|
|
pub app_name: String,
|
|
|
|
|
pub base_url: String,
|
|
|
|
|
pub md: String,
|
|
|
|
|
pub init: String,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
|
|
|
#[allow(non_snake_case)]
|
|
|
|
|
struct QueryParams {
|
|
|
|
|
pub data: Option<String>,
|
|
|
|
|
pub fromDomain: Option<String>,
|
|
|
|
|
pub fromPage: Option<String>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn get_data(data: & web::Data<AppData>, domain: String, page_name: String) -> String {
|
|
|
|
|
let fut_page_datas = db::get_page_by_name(&data.pool, domain.to_owned(), page_name.to_owned());
|
|
|
|
|
fn new_page_text(page_name: String, domain_from: &Option<String>, page_from: &Option<String>) -> String {
|
|
|
|
|
let mut retour = String::from("");
|
|
|
|
|
if let Some(domain_f) = domain_from {
|
|
|
|
|
if let Some(page_f) = page_from {
|
|
|
|
|
retour = format!("[retour](/{}/{})\n", domain_f, page_f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
retour + "# " + page_name.replace("_", " ").as_str()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn get_data(data: &web::Data<AppData>, domain: String, page_name: String, params: &Query<QueryParams>) -> String {
|
|
|
|
|
let fut_page_datas = db::get_page_by_name(&data.db_pool, domain.to_owned(), page_name.to_owned());
|
|
|
|
|
let page_datas = fut_page_datas.await.unwrap();
|
|
|
|
|
match page_datas.first() {
|
|
|
|
|
None => String::from("# ") + page_name.replace("_", " ").as_str(),
|
|
|
|
|
None => new_page_text(page_name, ¶ms.fromDomain, ¶ms.fromPage),
|
|
|
|
|
Some(dat) => (*dat.page_text).to_string(),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[get("/{domain}/{page}")]
|
|
|
|
|
async fn page(
|
|
|
|
|
path: web::Path<(String, String,)>,
|
|
|
|
|
path: web::Path<(String, String)>,
|
|
|
|
|
data: web::Data<AppData>,
|
|
|
|
|
params: web::Query<QueryParams>,
|
|
|
|
|
) -> impl Responder {
|
|
|
|
|
let domain = &path.0;
|
|
|
|
|
let page_name = &path.1;
|
|
|
|
|
|
|
|
|
|
let md = get_data(&data, domain.to_owned(), page_name.to_owned()).await;
|
|
|
|
|
let md = get_data(&data, domain.to_owned(), page_name.to_owned(), ¶ms).await;
|
|
|
|
|
|
|
|
|
|
match ¶ms.data {
|
|
|
|
|
Some(_) => {
|
|
|
|
|
@ -52,13 +66,13 @@ async fn page(
|
|
|
|
|
None => {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let name = data.name.to_owned() + " - " + page_name.as_str();
|
|
|
|
|
let root = data.root.to_owned();
|
|
|
|
|
let app_name = data.app_name.to_owned() + " - " + page_name.as_str();
|
|
|
|
|
let base_url = data.base_url.to_owned();
|
|
|
|
|
//let init = String::from("init();");
|
|
|
|
|
let init = format!("init();");
|
|
|
|
|
let init = format!("init({:?}, {:?});", domain, page_name);
|
|
|
|
|
PageTemplate {
|
|
|
|
|
name,
|
|
|
|
|
root,
|
|
|
|
|
app_name,
|
|
|
|
|
base_url,
|
|
|
|
|
md,
|
|
|
|
|
init,
|
|
|
|
|
}
|
|
|
|
|
@ -76,7 +90,7 @@ async fn save_page(
|
|
|
|
|
if pagename == "index" {
|
|
|
|
|
return HttpResponse::Ok();
|
|
|
|
|
}
|
|
|
|
|
db::update_page(&data.pool, domain.to_owned(), pagename.to_owned(), body)
|
|
|
|
|
db::update_page(&data.db_pool, domain.to_owned(), pagename.to_owned(), body)
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
HttpResponse::Ok()
|
|
|
|
|
|