diff --git a/src/services/mod.rs b/src/services/mod.rs index f0cda0f..f7eeed7 100644 --- a/src/services/mod.rs +++ b/src/services/mod.rs @@ -83,6 +83,7 @@ pub async fn cache_file( pub async fn download_from_cache( cached_data: cached_file::Data, + db: Database ) -> Option { let response_task = tokio::task::spawn(download_from_telegram_files(cached_data.message_id, cached_data.chat_id)); let filename_task = tokio::task::spawn(get_filename(cached_data.object_id, cached_data.object_type.clone())); @@ -91,6 +92,14 @@ pub async fn download_from_cache( let response = match response_task.await.unwrap() { Ok(v) => v, Err(err) => { + db.cached_file() + .delete(cached_file::object_id_object_type(cached_data.object_id, cached_data.object_type.clone())) + .exec() + .await + .unwrap(); + + tokio::spawn(cache_file(cached_data.object_id, cached_data.object_type, db)); + log::error!("{:?}", err); return None; }, diff --git a/src/views.rs b/src/views.rs index c5b200f..967f81f 100644 --- a/src/views.rs +++ b/src/views.rs @@ -27,12 +27,12 @@ async fn download_cached_file( Path((object_id, object_type)): Path<(i32, String)>, Extension(Ext { db }): Extension ) -> impl IntoResponse { - let cached_file = match get_cached_file_or_cache(object_id, object_type, db).await { + let cached_file = match get_cached_file_or_cache(object_id, object_type, db.clone()).await { Some(cached_file) => cached_file, None => return StatusCode::NO_CONTENT.into_response(), }; - let data = match download_from_cache(cached_file).await { + let data = match download_from_cache(cached_file, db).await { Some(v) => v, None => { return StatusCode::NO_CONTENT.into_response();