diff --git a/src/main.rs b/src/main.rs index 504e223..ec31811 100644 --- a/src/main.rs +++ b/src/main.rs @@ -274,11 +274,16 @@ fn detect_changes(old: &EconomicEvent, new: &EconomicEvent, now: &str) -> Vec Vec '{}'", + field_name, old_val, new_val); changes.push(EventChange { date: new.date.clone(), event: new.event.clone(), @@ -300,6 +307,12 @@ fn detect_changes(old: &EconomicEvent, new: &EconomicEvent, now: &str) -> Vec anyhow::Result anyhow::Result<()> { if changes.is_empty() { + println!("ā„¹ļø No changes to save"); return Ok(()); } - let events_dir = PathBuf::from("economic_events"); - fs::create_dir_all(&events_dir).await?; + println!("\nšŸ’¾ Saving {} changes...", changes.len()); + + let changes_dir = PathBuf::from("economic_event_changes"); + fs::create_dir_all(&changes_dir).await?; // Group changes by month let mut changes_by_month: HashMap> = HashMap::new(); @@ -403,12 +419,21 @@ async fn save_changes(changes: &[EventChange]) -> anyhow::Result<()> { } } + println!("šŸ“‚ Grouped into {} month(s)", changes_by_month.len()); + // Save each month's changes for (month_key, month_changes) in changes_by_month { let filename = format!("event_changes_{}.json", month_key); - let filepath = events_dir.join(&filename); + let filepath = changes_dir.join(&filename); // Load existing changes if file exists + let existing_count = if filepath.exists() { + let content = fs::read_to_string(&filepath).await?; + serde_json::from_str::>(&content).unwrap_or_default().len() + } else { + 0 + }; + let mut all_changes = if filepath.exists() { let content = fs::read_to_string(&filepath).await?; serde_json::from_str::>(&content).unwrap_or_default() @@ -417,13 +442,14 @@ async fn save_changes(changes: &[EventChange]) -> anyhow::Result<()> { }; // Append new changes - all_changes.extend(month_changes); + all_changes.extend(month_changes.clone()); // Save combined changes let json = serde_json::to_string_pretty(&all_changes)?; fs::write(&filepath, json).await?; - println!("šŸ”„ Updated changes file: {} ({} total changes)", filename, all_changes.len()); + println!(" āœ… {}: {} existing + {} new = {} total changes", + filename, existing_count, month_changes.len(), all_changes.len()); } Ok(()) @@ -523,6 +549,9 @@ async fn scrape_and_update( let mut all_changes = Vec::new(); let now = Local::now().naive_local().date().format("%Y-%m-%d").to_string(); + println!("šŸ“… Current date for comparison: {}", now); + println!("šŸ” Starting change detection...\n"); + loop { set_date_range(client, ¤t_start, end).await?; sleep(Duration::from_secs(3)).await; @@ -536,22 +565,38 @@ async fn scrape_and_update( println!(" šŸ“¦ Fetched {} events", events.len()); // Process events: detect changes and update map + let mut new_events_count = 0; + let mut updated_events_count = 0; + for new_event in events.clone() { let key = event_key(&new_event); if let Some(old_event) = existing_events.get(&key) { // Event exists - check for changes + println!("\n šŸ”Ž Comparing existing event:"); + println!(" Event: {}", new_event.event); + println!(" Date: {} | Time: {}", new_event.date, new_event.time); + let changes = detect_changes(old_event, &new_event, &now); if !changes.is_empty() { - println!(" šŸ”„ Detected {} change(s) in: {}", changes.len(), new_event.event); + println!(" ✨ {} change(s) detected and recorded!", changes.len()); all_changes.extend(changes); + updated_events_count += 1; } + } else { + new_events_count += 1; + println!(" āž• New event: {} on {}", new_event.event, new_event.date); } // Insert or update event existing_events.insert(key, new_event); } + println!("\n šŸ“Š Batch summary:"); + println!(" New events: {}", new_events_count); + println!(" Updated events: {}", updated_events_count); + println!(" Changes tracked: {}", all_changes.len()); + let next = match calculate_next_start_date(&events) { Ok(n) => n, Err(_) => { @@ -569,6 +614,9 @@ async fn scrape_and_update( sleep(Duration::from_secs(2)).await; } + println!("\nšŸŽÆ SCRAPE COMPLETE:"); + println!(" Total changes detected: {}", all_changes.len()); + Ok(all_changes) }