include_documents for /contents

This commit is contained in:
2025-10-17 18:01:07 +02:00
parent 831ec1d989
commit f9e798f3b3
2 changed files with 64 additions and 33 deletions
+18 -1
View File
@@ -1,5 +1,5 @@
use axum::{ use axum::{
extract::{Json, Path, State}, extract::{Json, Path, Query, State},
http::StatusCode, http::StatusCode,
}; };
use diesel::{dsl::exists, prelude::*, PgConnection}; use diesel::{dsl::exists, prelude::*, PgConnection};
@@ -50,6 +50,16 @@ pub struct FolderContentsResponse {
pub documents: Vec<DocumentResponse>, pub documents: Vec<DocumentResponse>,
} }
#[derive(Deserialize)]
pub struct FolderContentsQuery {
#[serde(default = "default_include_documents")]
pub include_documents: bool,
}
const fn default_include_documents() -> bool {
true
}
#[derive(Serialize)] #[derive(Serialize)]
pub struct FolderInfo { pub struct FolderInfo {
pub id: Uuid, pub id: Uuid,
@@ -150,6 +160,7 @@ pub async fn create_folder(
pub async fn list_folder_contents( pub async fn list_folder_contents(
State(state): State<AppState>, State(state): State<AppState>,
Path(folder_identifier): Path<String>, Path(folder_identifier): Path<String>,
Query(query): Query<FolderContentsQuery>,
user: AuthenticatedUser, user: AuthenticatedUser,
) -> AppResult<Json<FolderContentsResponse>> { ) -> AppResult<Json<FolderContentsResponse>> {
let mut conn = state.db()?; let mut conn = state.db()?;
@@ -183,6 +194,7 @@ pub async fn list_folder_contents(
}; };
let subfolders = child_folders.into_iter().map(folder_to_info).collect(); let subfolders = child_folders.into_iter().map(folder_to_info).collect();
let documents = if query.include_documents {
let docs_query = documents::table let docs_query = documents::table
.filter(documents::deleted_at.is_null()) .filter(documents::deleted_at.is_null())
.order(documents::uploaded_at.desc()); .order(documents::uploaded_at.desc());
@@ -219,6 +231,11 @@ pub async fn list_folder_contents(
)?); )?);
} }
documents
} else {
Vec::new()
};
Ok(Json(FolderContentsResponse { Ok(Json(FolderContentsResponse {
folder, folder,
subfolders, subfolders,
+14
View File
@@ -287,6 +287,20 @@ async fn folder_rename_updates_name_and_child_paths() -> Result<()> {
.expect("renamed folder present"); .expect("renamed folder present");
assert_eq!(renamed.name, "Archive"); assert_eq!(renamed.name, "Archive");
let folders_only = app
.get(
&format!(
"/api/folders/{}/contents?include_documents=false",
parent.folder.id
),
Some(&token),
)
.await?;
assert_eq!(folders_only.status(), StatusCode::OK);
let folders_only_body = body_to_vec(folders_only.into_body()).await?;
let folders_only_contents: FolderContents = serde_json::from_slice(&folders_only_body)?;
assert!(folders_only_contents.documents.is_empty());
let child_contents = app let child_contents = app
.get( .get(
&format!("/api/folders/{}/contents", child.folder.id), &format!("/api/folders/{}/contents", child.folder.id),