document types

This commit is contained in:
2025-10-31 00:13:16 +01:00
parent 3941ec61d3
commit 813ce24aeb
19 changed files with 1714 additions and 43 deletions
+22 -2
View File
@@ -1,3 +1,5 @@
use std::collections::{HashMap, HashSet};
use axum::{
extract::{Json, Path, Query, State},
http::StatusCode,
@@ -7,8 +9,8 @@ use serde::{Deserialize, Serialize};
use serde_json::Value;
use uuid::Uuid;
use crate::models::{Document, Folder, NewFolder};
use crate::schema::{documents, folders};
use crate::models::{Document, DocumentType, Folder, NewFolder};
use crate::schema::{document_types, documents, folders};
use crate::state::AppState;
use crate::{
auth::TenantScopedConn,
@@ -320,6 +322,20 @@ pub async fn list_folder_contents(
.load(&mut conn)?
};
let type_ids: HashSet<Uuid> = docs.iter().filter_map(|doc| doc.document_type_id).collect();
let doc_type_map: HashMap<Uuid, DocumentType> = if type_ids.is_empty() {
HashMap::new()
} else {
let ids: Vec<Uuid> = type_ids.iter().copied().collect();
document_types::table
.filter(document_types::tenant_id.eq(tenant_id))
.filter(document_types::id.eq_any(&ids))
.load::<DocumentType>(&mut conn)?
.into_iter()
.map(|typ| (typ.id, typ))
.collect()
};
let doc_ids: Vec<Uuid> = docs.iter().map(|doc| doc.id).collect();
let tags_map = load_tags_for_documents(&mut conn, &doc_ids)?;
let mut correspondents_map = load_correspondents_for_documents(&mut conn, &doc_ids)?;
@@ -332,6 +348,9 @@ pub async fn list_folder_contents(
let tags = tags_map.get(&doc.id).cloned();
let correspondents = correspondents_map.remove(&doc.id).unwrap_or_default();
let current_version = primary_versions.get(&doc.id).cloned();
let doc_type = doc
.document_type_id
.and_then(|id| doc_type_map.get(&id).cloned());
documents.push(to_document_response(
&state,
user_id,
@@ -339,6 +358,7 @@ pub async fn list_folder_contents(
tags,
correspondents,
current_version,
doc_type,
)?);
}