This commit is contained in:
2025-10-31 19:13:11 +01:00
parent 2d8a4432cc
commit 175387f0d3
19 changed files with 463 additions and 107 deletions
+19 -12
View File
@@ -18,7 +18,7 @@ use crate::{
Document, DocumentAsset, DocumentAssetObject, DocumentVersion, NewDocumentAsset,
NewDocumentAssetObject,
},
schema::{document_asset_objects, document_assets, document_versions, documents},
schema::{document_asset_objects, document_assets, document_versions},
state::AppState,
storage::TenantStorage,
utils::storage_paths::document_asset_object_key,
@@ -37,7 +37,7 @@ const PREVIEW_HEIGHT: u32 = THUMBNAIL_HEIGHT * 4;
const THUMBNAIL_ASSET_TYPE: &str = "thumbnail";
const PREVIEW_ASSET_TYPE: &str = "preview";
#[derive(Debug, Deserialize)]
#[derive(Debug, Deserialize, Clone)]
struct ThumbnailPayload {
document_id: Uuid,
document_version_id: Uuid,
@@ -75,9 +75,13 @@ impl JobHandler for GenerateThumbnailsJob {
};
let state_clone = state.clone();
let initial =
match task::spawn_blocking(move || load_thumbnail_context(state_clone, &payload)).await
{
let tenant_id = job.tenant_id;
let payload_for_context = payload.clone();
let initial = match task::spawn_blocking(move || {
load_thumbnail_context(state_clone, tenant_id, payload_for_context)
})
.await
{
Ok(Ok(ctx)) => ctx,
Ok(Err(err)) => {
warn!(job_id = %job.id, error = %err, "thumbnail job will retry");
@@ -123,8 +127,9 @@ impl JobHandler for GenerateThumbnailsJob {
let state_clone = state.clone();
let document_id = initial.document.id;
let version_id = initial.version.id;
let tenant_id = initial.tenant_id;
match task::spawn_blocking(move || {
persist_document_page_count(state_clone, document_id, version_id, page_count)
persist_document_page_count(state_clone, tenant_id, document_id, version_id, page_count)
})
.await
{
@@ -372,6 +377,7 @@ struct ThumbnailContext {
existing_preview: Option<DocumentAsset>,
existing_preview_objects: Vec<DocumentAssetObject>,
skip: bool,
tenant_id: Uuid,
}
struct GeneratedImage {
@@ -405,10 +411,12 @@ struct AssetPersistence {
fn load_thumbnail_context(
state: Arc<AppState>,
payload: &ThumbnailPayload,
tenant_id: Uuid,
payload: ThumbnailPayload,
) -> Result<ThumbnailContext, String> {
let base = load_document_version(
state.as_ref(),
tenant_id,
payload.document_id,
payload.document_version_id,
)?;
@@ -467,6 +475,7 @@ fn load_thumbnail_context(
existing_preview,
existing_preview_objects,
skip,
tenant_id: base.tenant_id,
})
}
@@ -708,15 +717,13 @@ fn persist_assets_metadata(
fn persist_document_page_count(
state: Arc<AppState>,
tenant_id: Uuid,
document_id: Uuid,
document_version_id: Uuid,
page_count: u32,
) -> Result<(), String> {
let mut conn = state.db_unscoped().map_err(|err| format!("{err:?}"))?;
let tenant_id: Uuid = documents::table
.find(document_id)
.select(documents::tenant_id)
.first(&mut conn)
let mut conn = state
.db_for_tenant(tenant_id)
.map_err(|err| format!("{err:?}"))?;
let existing_metadata: Value = document_versions::table