Skip to main content

poly_x_tracker/model/
trackings.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4use crate::model::Platform;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct Tracking {
9    pub id: String,
10    pub user_id: String,
11    pub title: String,
12    pub start_date: DateTime<Utc>,
13    pub end_date: DateTime<Utc>,
14    pub created_at: DateTime<Utc>,
15    pub updated_at: DateTime<Utc>,
16    pub user: TrackingUser,
17    pub stats: Option<TrackingStats>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct TrackingUser {
23    pub id: String,
24    pub handle: String,
25    pub name: String,
26    pub platform: Platform,
27    pub platform_id: String,
28    pub avatar_url: String,
29    pub bio: String,
30    pub verified: bool,
31    pub last_sync: DateTime<Utc>,
32    pub created_at: DateTime<Utc>,
33    pub updated_at: DateTime<Utc>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct TrackingStats {
39    pub total: u32,
40    pub cumulative: u32,
41    pub pace: u32,
42    pub percent_complete: u32,
43    pub days_elapsed: u32,
44    pub days_remaining: u32,
45    pub days_total: u32,
46    pub is_complete: bool,
47    pub daily: Vec<TrackingStatsDaily>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct TrackingStatsDaily {
53    pub date: DateTime<Utc>,
54    pub count: u32,
55    pub cumulative: u32,
56}