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
Commit 5a31e282 authored by Pierre Jarriges's avatar Pierre Jarriges
Browse files

update page

parent bd8bd674
No related branches found
No related tags found
No related merge requests found
...@@ -60,7 +60,9 @@ async fn main() -> std::io::Result<()> { ...@@ -60,7 +60,9 @@ async fn main() -> std::io::Result<()> {
.wrap(AuthService {}) .wrap(AuthService {})
.service(service::admin_workspace) .service(service::admin_workspace)
.service(service::add_page) .service(service::add_page)
.service(service::get_page_data), .service(service::get_page_data)
.service(service::files::post_files)
.service(service::files::delete_static_file),
), ),
) )
.service(service::files::favicon) .service(service::files::favicon)
......
use crate::website::{Page, WebSite};
use crate::AppState; use crate::AppState;
use actix_web::{ use actix_web::{
get, post, get, post,
web::{Data, Form, Json}, web::{Data, Form},
HttpRequest, HttpResponse, HttpRequest, HttpResponse,
}; };
use std::sync::RwLock; use std::sync::RwLock;
...@@ -89,42 +88,3 @@ pub async fn admin_login() -> HttpResponse { ...@@ -89,42 +88,3 @@ pub async fn admin_login() -> HttpResponse {
", ",
) )
} }
#[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 {
match website
.write()
.expect("Couldn't acquire website write lock")
.add_page(add_page_data.parent_page_id, add_page_data.new_page.clone())
{
Ok(()) => HttpResponse::Ok().finish(),
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)),
}
}
mod admin; mod admin;
pub mod files; pub mod files;
mod website;
pub use admin::*; pub use admin::*;
pub use website::*;
use crate::website::{Page, WebSite};
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())
{
Ok(()) => HttpResponse::Ok().finish(),
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();
let updated_page = updated_page.into_inner();
match website
.write()
.expect("Couldn't acquire website write lock")
.update_page(id, updated_page)
{
Ok(page) => HttpResponse::Ok().json(page),
Err(msg) => {
HttpResponse::NotFound().body(format!("Error updating page with id {} - {:?}", id, msg))
}
}
}
...@@ -194,6 +194,10 @@ impl WebSite { ...@@ -194,6 +194,10 @@ impl WebSite {
Self::find_page(&self.root_page, id) Self::find_page(&self.root_page, id)
} }
pub fn get_page_mut(&mut self, id: usize) -> Option<&mut Page> {
Self::find_page_mut(&mut self.root_page, id)
}
pub fn add_page(&mut self, parent_page_id: usize, page: Page) -> Result<(), String> { pub fn add_page(&mut self, parent_page_id: usize, page: Page) -> Result<(), String> {
let id = self.last_generated_page_id + 1; let id = self.last_generated_page_id + 1;
let parent_page = Self::find_page_mut(&mut self.root_page, parent_page_id); let parent_page = Self::find_page_mut(&mut self.root_page, parent_page_id);
...@@ -215,6 +219,16 @@ impl WebSite { ...@@ -215,6 +219,16 @@ impl WebSite {
Ok(()) Ok(())
} }
pub fn update_page(&mut self, id: usize, updated_page: Page) -> Result<&mut Page, String> {
match self.get_page_mut(id) {
Some(page) => {
*page = updated_page;
Ok(page)
}
None => Err(format!("Page with id {} was not found", id)),
}
}
} }
#[cfg(test)] #[cfg(test)]
...@@ -290,4 +304,20 @@ mod test_website { ...@@ -290,4 +304,20 @@ mod test_website {
assert_eq!(retrieved.metadata.title, "Added page"); assert_eq!(retrieved.metadata.title, "Added page");
remove_test_dir(&test_dir); remove_test_dir(&test_dir);
} }
#[test]
fn test_update_page() {
let test_dir = PathBuf::from("./test");
let mut ws = test_website(&test_dir);
let mut root_page = ws.get_page_mut(1).unwrap().clone();
assert_eq!(root_page.metadata.title, "TEST");
root_page.metadata.title = String::from("UPDATED");
let updated = ws.update_page(1, root_page).unwrap();
assert_eq!(updated.metadata.title, "UPDATED");
let root_page = ws.get_page(1).unwrap();
assert_eq!(root_page.metadata.title, "UPDATED");
remove_test_dir(&test_dir);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment