poly_x_tracker/model/
trackings.rs1use 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}