From 2aee20711c4dbb05ead27ed80c2279c8919c92b7 Mon Sep 17 00:00:00 2001
From: Pierre Jarriges <pierre.jarriges@tutanota.com>
Date: Tue, 4 Oct 2022 11:11:24 +0200
Subject: [PATCH] rebuild website after update

---
 src/service/website.rs | 54 ++++++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/src/service/website.rs b/src/service/website.rs
index 139cf98..e5af919 100644
--- a/src/service/website.rs
+++ b/src/service/website.rs
@@ -26,12 +26,18 @@ pub async fn add_page(
 
     match website.add_page(add_page_data.parent_page_id, add_page_data.new_page.clone()) {
         Ok(()) => {
+            if let Err(msg) = website.build() {
+                return HttpResponse::InternalServerError()
+                    .body(format!("Error rebuilding Website - {}", msg));
+            }
+
             if let Err(msg) =
                 website.save(&app_state.read().expect("Couldn't read AppState").config)
             {
                 return HttpResponse::InternalServerError()
                     .body(format!("Error saving website to static file - {}", msg));
             };
+
             HttpResponse::Created().finish()
         }
         Err(msg) => {
@@ -64,13 +70,12 @@ pub async fn update_page(
     updated_page: Json<Page>,
 ) -> HttpResponse {
     let id = id.into_inner();
+    let mut website = website
+        .write()
+        .expect("Couldn't acquire website write lock");
 
     let page = {
-        match website
-            .write()
-            .expect("Couldn't acquire website write lock")
-            .update_page(id, updated_page.into_inner())
-        {
+        match website.update_page(id, updated_page.into_inner()) {
             Ok(page) => page.clone(),
             Err(msg) => {
                 return HttpResponse::BadRequest()
@@ -79,11 +84,12 @@ pub async fn update_page(
         }
     };
 
-    if let Err(msg) = website
-        .read()
-        .expect("Couldn't read WebSite")
-        .save(&app_state.read().expect("Couldn't read AppState").config)
-    {
+    if let Err(msg) = website.build() {
+        return HttpResponse::InternalServerError()
+            .body(format!("Error rebuilding Website - {}", msg));
+    }
+
+    if let Err(msg) = website.save(&app_state.read().expect("Couldn't read AppState").config) {
         return HttpResponse::InternalServerError()
             .body(format!("Error saving website to static file - {}", msg));
     };
@@ -129,11 +135,12 @@ pub async fn update_template(
     website: Data<RwLock<WebSite>>,
     updated_template: Json<PageTemplate>,
 ) -> HttpResponse {
+    let mut website = website
+        .write()
+        .expect("Couldn't acquire website write lock");
+
     let updated = {
-        let mut ws = website
-            .write()
-            .expect("Couldn't acquire website write lock");
-        match ws.update_template(updated_template.into_inner()) {
+        match website.update_template(updated_template.into_inner()) {
             Ok(template) => template.clone(),
             Err(msg) => {
                 return HttpResponse::BadRequest().body(format!("Error updating template {}", msg))
@@ -141,19 +148,14 @@ pub async fn update_template(
         }
     };
 
-    WebSite::update_page_rec_after_template_update(
-        &mut website
-            .write()
-            .expect("Couldn't acquire website write lock")
-            .root_page,
-        &updated,
-    );
+    WebSite::update_page_rec_after_template_update(&mut website.root_page, &updated);
 
-    if let Err(msg) = website
-        .read()
-        .expect("Couldn't read WebSite")
-        .save(&app_state.read().expect("Couldn't read AppState").config)
-    {
+    if let Err(msg) = website.build() {
+        return HttpResponse::InternalServerError()
+            .body(format!("Error rebuilding Website - {}", msg));
+    }
+
+    if let Err(msg) = website.save(&app_state.read().expect("Couldn't read AppState").config) {
         return HttpResponse::InternalServerError()
             .body(format!("Error saving website to static file - {}", msg));
     };
-- 
GitLab