From 4524d84ab910460caddcf49dd1d5a1aa4be89616 Mon Sep 17 00:00:00 2001 From: Mariano Riefolo Date: Wed, 4 Sep 2024 16:25:27 +0200 Subject: [PATCH] feat(api): implement 30-minute cache for PDF link requests --- .gitignore | 1 + src/api/mod.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/.gitignore b/.gitignore index 763bcb2..6d79bd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target pdf csv +pdf.json diff --git a/src/api/mod.rs b/src/api/mod.rs index facac97..f0d9233 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -28,6 +28,16 @@ pub fn get_routes() -> Router { } async fn get_pdf_links() -> Result, reqwest::Error> { + if let Ok(metadata) = fs::metadata("pdf.json") { + let last_modified = metadata.modified().unwrap(); + let now = std::time::SystemTime::now(); + let diff = now.duration_since(last_modified).unwrap().as_secs(); + if diff < 30 * 60 { + let data = fs::read_to_string("pdf.json").unwrap(); + return Ok(serde_json::from_str(&data).unwrap()); + } + } + let response = reqwest::get("https://cassandroferminervi.edu.it/orario-scolastico/") .await? .text() @@ -41,6 +51,9 @@ async fn get_pdf_links() -> Result, reqwest::Error> { result.push(element.attr("href").unwrap().to_owned()); } + let data = serde_json::to_string(&result).unwrap(); + fs::write("pdf.json", data).unwrap(); + Ok(result) }