diff --git a/backend/src/models.rs b/backend/src/models.rs index 363b516..f3b8932 100644 --- a/backend/src/models.rs +++ b/backend/src/models.rs @@ -30,7 +30,6 @@ pub struct Folder { pub id: Uuid, pub name: String, pub parent_id: Option, - pub path_cache: Option, pub created_at: NaiveDateTime, pub updated_at: NaiveDateTime, } @@ -41,7 +40,6 @@ pub struct NewFolder { pub id: Uuid, pub name: String, pub parent_id: Option, - pub path_cache: Option, } #[derive(Debug, Clone, Queryable, Identifiable, Associations)] diff --git a/backend/src/routes/folders.rs b/backend/src/routes/folders.rs index 9592c34..3386f1f 100644 --- a/backend/src/routes/folders.rs +++ b/backend/src/routes/folders.rs @@ -55,7 +55,6 @@ pub struct FolderInfo { pub id: Uuid, pub name: String, pub parent_id: Option, - pub path_cache: Option, pub created_at: String, pub updated_at: String, } @@ -97,12 +96,10 @@ pub async fn ensure_folder_path( let folder = if let Some(folder) = existing { folder } else { - let path_cache = build_path_cache(conn, current_parent, name)?; let new_folder = NewFolder { id: Uuid::new_v4(), name: name.to_string(), parent_id: current_parent, - path_cache, }; diesel::insert_into(folders::table) @@ -133,13 +130,11 @@ pub async fn create_folder( } let mut conn = state.db()?; - let path_cache = build_path_cache(&mut conn, payload.parent_id, &payload.name)?; let new_folder = NewFolder { id: Uuid::new_v4(), name: payload.name.trim().to_string(), parent_id: payload.parent_id, - path_cache, }; diesel::insert_into(folders::table) @@ -346,49 +341,24 @@ pub async fn update_folder( )); } - let new_path = build_path_cache(conn, next_parent, &new_name)?; - diesel::update(folders::table.find(folder_id)) .set(( folders::parent_id.eq(next_parent), folders::name.eq(&new_name), - folders::path_cache.eq(new_path), )) .execute(conn)?; - refresh_descendant_paths(conn, folder_id)?; - Ok(()) })?; Ok(StatusCode::NO_CONTENT) } -fn build_path_cache( - conn: &mut PgConnection, - parent_id: Option, - name: &str, -) -> AppResult> { - let path = if let Some(parent_id) = parent_id { - let parent: Folder = folders::table.find(parent_id).first(conn)?; - let base = parent - .path_cache - .unwrap_or_else(|| "/".to_string()) - .trim_end_matches('/') - .to_string(); - format!("{}/{}", base, name) - } else { - format!("/{}", name) - }; - Ok(Some(path)) -} - fn folder_to_info(folder: Folder) -> FolderInfo { FolderInfo { id: folder.id, name: folder.name, parent_id: folder.parent_id, - path_cache: folder.path_cache, created_at: to_iso(folder.created_at), updated_at: to_iso(folder.updated_at), } @@ -412,19 +382,3 @@ pub(super) fn gather_descendant_folder_ids( Ok(ids) } - -fn refresh_descendant_paths(conn: &mut PgConnection, parent_id: Uuid) -> AppResult<()> { - let children: Vec = folders::table - .filter(folders::parent_id.eq(Some(parent_id))) - .load(conn)?; - - for child in children { - let path_cache = build_path_cache(conn, Some(parent_id), &child.name)?; - diesel::update(folders::table.find(child.id)) - .set(folders::path_cache.eq(path_cache)) - .execute(conn)?; - refresh_descendant_paths(conn, child.id)?; - } - - Ok(()) -} diff --git a/backend/src/schema.rs b/backend/src/schema.rs index 54063fe..57ff54a 100644 --- a/backend/src/schema.rs +++ b/backend/src/schema.rs @@ -86,8 +86,6 @@ diesel::table! { #[max_length = 255] name -> Varchar, parent_id -> Nullable, - #[max_length = 1000] - path_cache -> Nullable, created_at -> Timestamptz, updated_at -> Timestamptz, } diff --git a/backend/tests/folders_flow.rs b/backend/tests/folders_flow.rs index 5d11f87..c9447cc 100644 --- a/backend/tests/folders_flow.rs +++ b/backend/tests/folders_flow.rs @@ -16,7 +16,6 @@ struct FolderResponse { struct FolderInfo { id: Uuid, name: String, - path_cache: Option, } #[derive(Deserialize)] @@ -287,7 +286,6 @@ async fn folder_rename_updates_name_and_child_paths() -> Result<()> { .find(|f| f.id == parent.folder.id) .expect("renamed folder present"); assert_eq!(renamed.name, "Archive"); - assert_eq!(renamed.path_cache.as_deref(), Some("/Archive")); let child_contents = app .get( @@ -299,7 +297,7 @@ async fn folder_rename_updates_name_and_child_paths() -> Result<()> { let child_contents_body = body_to_vec(child_contents.into_body()).await?; let child_details: FolderContents = serde_json::from_slice(&child_contents_body)?; let child_folder = child_details.folder.expect("child folder info"); - assert_eq!(child_folder.path_cache.as_deref(), Some("/Archive/Q1")); + assert_eq!(child_folder.name, "Q1"); app.cleanup().await?; Ok(())