a lot of stuff
ci / docker (backend, backend/Dockerfile, backend) (push) Successful in 14m29s
ci / docker (frontend, frontend/Dockerfile, frontend) (push) Successful in 14m28s

This commit is contained in:
2025-10-16 00:38:03 +02:00
parent 5b420a6b62
commit aef34791f3
21 changed files with 2987 additions and 736 deletions
+51 -1
View File
@@ -11,7 +11,7 @@ use std::collections::{HashMap, HashSet};
use uuid::Uuid;
use crate::models::{Document, Folder, NewFolder};
use crate::schema::{document_tags, documents, folders};
use crate::schema::{document_correspondents, document_tags, documents, folders};
use crate::state::AppState;
use crate::{
auth::AuthenticatedUser,
@@ -60,6 +60,7 @@ pub struct FolderContentsResponse {
pub struct DocumentSearchQuery {
pub query: Option<String>,
pub tags: Option<String>,
pub correspondents: Option<String>,
}
#[derive(Serialize)]
@@ -353,6 +354,55 @@ pub async fn search_documents(
}
}
if let Some(correspondents_param) = params
.correspondents
.as_ref()
.map(|s| s.trim())
.filter(|s| !s.is_empty())
{
let correspondent_ids: Result<Vec<Uuid>, _> = correspondents_param
.split(',')
.map(|s| Uuid::parse_str(s.trim()))
.collect();
if let Ok(ids) = correspondent_ids {
if !ids.is_empty() {
let mut doc_id_set: Option<HashSet<Uuid>> = None;
for correspondent_id in &ids {
let docs_for_correspondent: Vec<Uuid> = document_correspondents::table
.filter(document_correspondents::correspondent_id.eq(*correspondent_id))
.select(document_correspondents::document_id)
.load(&mut conn)?;
let docs_set: HashSet<Uuid> = docs_for_correspondent.into_iter().collect();
doc_id_set = Some(match doc_id_set {
Some(existing) => existing.intersection(&docs_set).cloned().collect(),
None => docs_set,
});
if let Some(ref set) = doc_id_set {
if set.is_empty() {
break;
}
}
}
let matching_doc_ids: HashSet<Uuid> = doc_id_set.unwrap_or_default();
if matching_doc_ids.is_empty() {
return Ok(Json(vec![]));
}
let new_filter = match &filter_ids {
Some(existing) => existing.intersection(&matching_doc_ids).copied().collect(),
None => matching_doc_ids.clone(),
};
filter_ids = Some(new_filter);
}
}
}
if let Some(ref set) = filter_ids {
if set.is_empty() {
return Ok(Json(vec![]));