2
0
Fork 0
mirror of https://git.asonix.dog/asonix/pict-rs synced 2024-12-22 11:21:24 +00:00

Remove a couple redundant db accesses

This commit is contained in:
asonix 2024-11-23 15:37:28 -06:00
parent d4d7ce9366
commit 89161d03c9
2 changed files with 21 additions and 16 deletions

View file

@ -8,25 +8,19 @@ use crate::{
formats::ProcessableFormat, formats::ProcessableFormat,
magick::{MagickError, MAGICK_CONFIGURE_PATH, MAGICK_TEMPORARY_PATH}, magick::{MagickError, MAGICK_CONFIGURE_PATH, MAGICK_TEMPORARY_PATH},
process::Process, process::Process,
repo::Alias, repo::Hash,
state::State, state::State,
store::Store, store::Store,
}; };
pub(crate) async fn generate<S>( pub(crate) async fn generate<S>(
state: &State<S>, state: &State<S>,
alias: &Alias, hash: Hash,
original_details: &Details, original_details: &Details,
) -> Result<String, Error> ) -> Result<String, Error>
where where
S: Store + 'static, S: Store + 'static,
{ {
let hash = state
.repo
.hash(alias)
.await?
.ok_or(UploadError::MissingIdentifier)?;
let identifier = if original_details.is_video() { let identifier = if original_details.is_video() {
crate::generate::ensure_motion_identifier(state, hash, original_details).await? crate::generate::ensure_motion_identifier(state, hash, original_details).await?
} else { } else {

View file

@ -120,6 +120,17 @@ async fn ensure_details<S: Store + 'static>(
ensure_details_identifier(state, &identifier).await ensure_details_identifier(state, &identifier).await
} }
async fn ensure_details_hash<S: Store + 'static>(
state: &State<S>,
hash: Hash,
) -> Result<Details, Error> {
let Some(identifier) = state.repo.identifier(hash).await? else {
return Err(UploadError::MissingIdentifier.into());
};
ensure_details_identifier(state, &identifier).await
}
#[tracing::instrument(skip(state))] #[tracing::instrument(skip(state))]
async fn ensure_details_identifier<S: Store + 'static>( async fn ensure_details_identifier<S: Store + 'static>(
state: &State<S>, state: &State<S>,
@ -1117,14 +1128,14 @@ async fn do_serve<S: Store + 'static>(
alias: Alias, alias: Alias,
state: web::Data<State<S>>, state: web::Data<State<S>>,
) -> Result<HttpResponse, Error> { ) -> Result<HttpResponse, Error> {
let (hash, alias, not_found) = if let Some(hash) = state.repo.hash(&alias).await? { let (hash, not_found) = if let Some(hash) = state.repo.hash(&alias).await? {
(hash, alias, false) (hash, false)
} else { } else {
let Some((alias, hash)) = not_found_hash(&state.repo).await? else { let Some((_, hash)) = not_found_hash(&state.repo).await? else {
return Ok(HttpResponse::NotFound().finish()); return Ok(HttpResponse::NotFound().finish());
}; };
(hash, alias, true) (hash, true)
}; };
let Some(identifier) = state.repo.identifier(hash.clone()).await? else { let Some(identifier) = state.repo.identifier(hash.clone()).await? else {
@ -1133,7 +1144,7 @@ async fn do_serve<S: Store + 'static>(
return Ok(HttpResponse::NotFound().finish()); return Ok(HttpResponse::NotFound().finish());
}; };
let details = ensure_details(&state, &alias).await?; let details = ensure_details_identifier(&state, &identifier).await?;
if let Some(public_url) = state.store.public_url(&identifier) { if let Some(public_url) = state.store.public_url(&identifier) {
return Ok(HttpResponse::SeeOther() return Ok(HttpResponse::SeeOther()
@ -1174,7 +1185,7 @@ async fn do_serve_head<S: Store + 'static>(
return Ok(HttpResponse::NotFound().finish()); return Ok(HttpResponse::NotFound().finish());
}; };
let details = ensure_details(&state, &alias).await?; let details = ensure_details_identifier(&state, &identifier).await?;
if let Some(public_url) = state.store.public_url(&identifier) { if let Some(public_url) = state.store.public_url(&identifier) {
return Ok(HttpResponse::SeeOther() return Ok(HttpResponse::SeeOther()
@ -1385,8 +1396,8 @@ async fn blurhash<S: Store + 'static>(
let blurhash = if let Some(blurhash) = state.repo.blurhash(hash.clone()).await? { let blurhash = if let Some(blurhash) = state.repo.blurhash(hash.clone()).await? {
blurhash blurhash
} else { } else {
let details = ensure_details(&state, &alias).await?; let details = ensure_details_hash(&state, hash.clone()).await?;
let blurhash = blurhash::generate(&state, &alias, &details).await?; let blurhash = blurhash::generate(&state, hash.clone(), &details).await?;
let blurhash: Arc<str> = Arc::from(blurhash); let blurhash: Arc<str> = Arc::from(blurhash);
state.repo.relate_blurhash(hash, blurhash.clone()).await?; state.repo.relate_blurhash(hash, blurhash.clone()).await?;