Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
website.rs 3.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pierre Jarriges's avatar
    Pierre Jarriges committed
    use crate::website::{Page, PageTemplate, WebSite};
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
    use actix_web::{
        get, post, put,
        web::{Data, Json},
        HttpResponse,
    };
    use std::sync::RwLock;
    
    #[derive(serde::Deserialize, Clone)]
    pub struct AddPageData {
        parent_page_id: usize,
        new_page: Page,
    }
    
    #[post("/add-page")]
    pub async fn add_page(
        website: Data<RwLock<WebSite>>,
        add_page_data: Json<AddPageData>,
    ) -> HttpResponse {
        let add_page_data = add_page_data.into_inner();
        match website
            .write()
            .expect("Couldn't acquire website write lock")
            .add_page(add_page_data.parent_page_id, add_page_data.new_page.clone())
        {
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
            Ok(()) => HttpResponse::Created().finish(),
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
            Err(msg) => {
                HttpResponse::BadRequest().body(format!("Error adding new page to website - {}", msg))
            }
        }
    }
    
    #[get("/page-data/{id}")]
    pub async fn get_page_data(
        website: Data<RwLock<WebSite>>,
        id: actix_web::web::Path<usize>,
    ) -> HttpResponse {
        let id = id.into_inner();
        match website
            .read()
            .expect("Couldn't acquire website read lock")
            .get_page(id)
        {
            Some(page) => HttpResponse::Ok().json(page),
            None => HttpResponse::NotFound().body(format!("Page with id {} was not found", id)),
        }
    }
    
    #[put("/update-page/{id}")]
    pub async fn update_page(
        id: actix_web::web::Path<usize>,
        website: Data<RwLock<WebSite>>,
        updated_page: Json<Page>,
    ) -> HttpResponse {
        let id = id.into_inner();
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
        match website
            .write()
            .expect("Couldn't acquire website write lock")
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
            .update_page(id, updated_page.into_inner())
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
        {
            Ok(page) => HttpResponse::Ok().json(page),
            Err(msg) => {
                HttpResponse::NotFound().body(format!("Error updating page with id {} - {:?}", id, msg))
            }
        }
    }
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
    
    #[post("/add-template")]
    pub async fn add_template(
        website: Data<RwLock<WebSite>>,
        new_template: Json<PageTemplate>,
    ) -> HttpResponse {
        match website
            .write()
            .expect("Couldn't acquire website write lock")
            .add_template(new_template.into_inner())
        {
            Ok(template) => HttpResponse::Created().json(template),
            Err(msg) => HttpResponse::BadRequest().body(format!("Error adding new template {}", msg)),
        }
    }
    
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
    #[put("/update-template")]
    
    Pierre Jarriges's avatar
    Pierre Jarriges committed
    pub async fn update_template(
        website: Data<RwLock<WebSite>>,
        updated_template: Json<PageTemplate>,
    ) -> HttpResponse {
        let updated = {
            let mut ws = website
                .write()
                .expect("Couldn't acquire website write lock");
            match ws.update_template(updated_template.into_inner()) {
                Ok(template) => template.clone(),
                Err(msg) => {
                    return HttpResponse::BadRequest().body(format!("Error updating template {}", msg))
                }
            }
        };
    
        WebSite::update_page_rec_after_template_update(
            &mut website
                .write()
                .expect("Couldn't acquire website write lock")
                .root_page,
            &updated,
        );
    
        HttpResponse::Ok().json(updated)
    }