This commit is contained in:
Jonas Rabenstein 2026-08-12 13:24:01 +02:00
commit a9d22e8312
18 changed files with 2308 additions and 0 deletions

71
src/model.rs Normal file
View file

@ -0,0 +1,71 @@
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone)]
pub struct TrackPoint {
pub index: usize,
pub time: DateTime<Utc>,
pub lat: f64,
pub lon: f64,
}
#[derive(Debug, Clone)]
pub struct DetectedCrossing {
pub track_index: usize,
pub crossing_time: DateTime<Utc>,
pub lat: f64,
pub lon: f64,
pub from_county_id: i64,
pub to_county_id: i64,
pub fraction: f64,
}
#[derive(Debug, Deserialize)]
pub struct WebhookEnvelope {
pub secret: String,
pub events: Vec<WebhookEvent>,
}
#[derive(Debug, Deserialize)]
pub struct WebhookEvent {
pub athlete_id: String,
#[serde(rename = "type")]
pub event_type: String,
pub timestamp: DateTime<Utc>,
#[serde(default)]
pub activity: Option<Value>,
}
#[derive(Debug, Serialize)]
pub struct LeaderboardRow {
pub rank: i64,
pub athlete: String,
pub from_county: String,
pub to_county: String,
pub crossing_time: DateTime<Utc>,
pub activity_id: String,
pub activity_url: String,
pub interval_url: Option<String>,
pub average_watts: Option<f64>,
pub average_heartrate: Option<f64>,
}
#[derive(Debug, Serialize)]
pub struct LeaderboardGroup {
pub bucket_start: DateTime<Utc>,
pub from_county: String,
pub to_county: String,
pub rows: Vec<LeaderboardRow>,
}