This commit is contained in:
2025-10-11 14:39:58 +02:00
parent 6f6abef5d2
commit cd27f36e3d
12 changed files with 616 additions and 12 deletions
+18 -8
View File
@@ -102,10 +102,20 @@ impl JobHandler for GenerateThumbnailsJob {
}
};
let asset_id = initial
.existing_asset
.as_ref()
.map(|asset| asset.id)
.unwrap_or_else(Uuid::new_v4);
let s3_key = format!(
"documents/{}/v{}/assets/{}/{}",
initial.document.id, initial.version.version_number, THUMBNAIL_ASSET_TYPE, asset_id
);
if let Err(err) = state
.storage
.put_object(
&generation.s3_key,
&s3_key,
generation.image_bytes.clone(),
Some("image/png".into()),
)
@@ -120,7 +130,7 @@ impl JobHandler for GenerateThumbnailsJob {
let state_clone = state.clone();
match task::spawn_blocking(move || {
persist_thumbnail_metadata(state_clone, &initial, &generation)
persist_thumbnail_metadata(state_clone, &initial, &generation, asset_id, &s3_key)
})
.await
{
@@ -148,6 +158,7 @@ impl JobHandler for GenerateThumbnailsJob {
struct ThumbnailContext {
document: Document,
version: DocumentVersion,
existing_asset: Option<DocumentAsset>,
skip: bool,
}
@@ -155,7 +166,6 @@ struct GeneratedThumbnail {
image_bytes: Vec<u8>,
width: Option<i32>,
height: Option<i32>,
s3_key: String,
}
fn load_thumbnail_context(
@@ -195,6 +205,7 @@ fn load_thumbnail_context(
Ok(ThumbnailContext {
document,
version,
existing_asset: existing,
skip,
})
}
@@ -219,13 +230,10 @@ fn generate_thumbnail(document: &Document, bytes: &[u8]) -> Result<GeneratedThum
generate_image_thumbnail(bytes)?
};
let s3_key = format!("thumbnails/{}/{}.png", document.id, Uuid::new_v4());
Ok(GeneratedThumbnail {
image_bytes: png_bytes,
width,
height,
s3_key,
})
}
@@ -284,14 +292,16 @@ fn persist_thumbnail_metadata(
state: Arc<AppState>,
context: &ThumbnailContext,
generated: &GeneratedThumbnail,
asset_id: Uuid,
s3_key: &str,
) -> Result<(), String> {
let mut conn = state.db().map_err(|err| format!("{err:?}"))?;
let new_asset = NewDocumentAsset {
id: Uuid::new_v4(),
id: asset_id,
document_version_id: context.version.id,
asset_type: THUMBNAIL_ASSET_TYPE.to_string(),
s3_key: generated.s3_key.clone(),
s3_key: s3_key.to_string(),
mime_type: "image/png".to_string(),
width: generated.width,
height: generated.height,