diff --git a/src/api/core/ciphers.rs b/src/api/core/ciphers.rs index 5d1d73c..8c9cd6a 100644 --- a/src/api/core/ciphers.rs +++ b/src/api/core/ciphers.rs @@ -229,11 +229,15 @@ fn post_ciphers_import(data: JsonUpcase, headers: Headers, conn: DbC let data: ImportData = data.into_inner().data; // Read and create the folders - let folders: Vec<_> = data.Folders.into_iter().map(|folder| { - let mut folder = Folder::new(headers.user.uuid.clone(), folder.Name); - folder.save(&conn); - folder - }).collect(); + let mut folders: Vec<_> = Vec::new(); + for folder in data.Folders.into_iter() { + let mut new_folder = Folder::new(headers.user.uuid.clone(), folder.Name); + if new_folder.save(&conn).is_err() { + err!("Failed importing folders") + } else { + folders.push(new_folder); + } + } // Read the relations between folders and ciphers use std::collections::HashMap; diff --git a/src/api/core/folders.rs b/src/api/core/folders.rs index 6532a7e..9111460 100644 --- a/src/api/core/folders.rs +++ b/src/api/core/folders.rs @@ -47,7 +47,9 @@ fn post_folders(data: JsonUpcase, headers: Headers, conn: DbConn, ws let mut folder = Folder::new(headers.user.uuid.clone(), data.Name); - folder.save(&conn); + if folder.save(&conn).is_err() { + err!("Failed to save folder") + } ws.send_folder_update(UpdateType::SyncFolderCreate, &folder); Ok(Json(folder.to_json())) @@ -73,7 +75,9 @@ fn put_folder(uuid: String, data: JsonUpcase, headers: Headers, conn folder.name = data.Name; - folder.save(&conn); + if folder.save(&conn).is_err() { + err!("Failed to save folder") + } ws.send_folder_update(UpdateType::SyncFolderUpdate, &folder); Ok(Json(folder.to_json())) diff --git a/src/db/models/folder.rs b/src/db/models/folder.rs index d50912e..2808b92 100644 --- a/src/db/models/folder.rs +++ b/src/db/models/folder.rs @@ -70,16 +70,12 @@ use db::schema::{folders, folders_ciphers}; /// Database methods impl Folder { - pub fn save(&mut self, conn: &DbConn) -> bool { + pub fn save(&mut self, conn: &DbConn) -> QueryResult<()> { User::update_uuid_revision(&self.user_uuid, conn); self.updated_at = Utc::now().naive_utc(); - match diesel::replace_into(folders::table) - .values(&*self) - .execute(&**conn) { - Ok(1) => true, // One row inserted - _ => false, - } + diesel::replace_into(folders::table) + .values(&*self).execute(&**conn).and(Ok(())) } pub fn delete(&self, conn: &DbConn) -> QueryResult<()> {