use serde_json;
use chrono::{DateTime, Utc};
use client::Client;
use error::HelpScoutError;
use api::reports::FilterTag;
use super::UserReportBuilder;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserReport {
pub filter_tags: Vec<FilterTag>,
pub user: UserDetail,
pub current: UserTimeRangeStatistics,
pub previous: Option<UserTimeRangeStatistics>,
pub deltas: Option<UserMultiTimeRangeStatistics>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserTimeRangeStatistics {
pub start_date: DateTime<Utc>,
pub end_date: DateTime<Utc>,
pub total_days: i32,
pub resolved: i32,
pub conversations_created: i32,
pub closed: i32,
pub ratings: Option<Vec<Rating>>,
pub total_replies: i32,
pub resolved_on_first_reply: i32,
pub percent_resolved_on_first_reply: f64,
pub replies_to_resolve: f64,
pub handle_time: f64,
pub happiness_score: f64,
pub response_time: f64,
pub resolution_time: f64,
pub replies_per_day: f64,
pub customers_helped: i32,
pub total_conversations: i32,
pub conversations_per_day: f64,
pub busiest_day: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserMultiTimeRangeStatistics {
pub total_conversations: f64,
pub customers_helped: f64,
pub happiness_score: f64,
pub replies_per_day: f64,
pub resolved_on_first_reply: f64,
pub handle_time: f64,
pub conversations_per_day: f64,
pub resolved: f64,
pub replies_to_resolve: f64,
pub active_conversations: f64,
pub total_replies: f64,
pub closed: f64,
pub response_time: f64,
pub resolution_time: f64,
pub conversations_created: f64,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Rating {
pub replies_sent: f64,
pub first_response_time: f64,
pub resolve_time: f64,
pub rating_id: String,
pub response_time: f64,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserDetail {
pub id: i32,
pub has_photo: bool,
pub created_at: DateTime<Utc>,
pub name: String,
pub total_customers_helped: i32,
pub photo_url: String,
}
impl UserReportBuilder {
pub fn overall(mut self, client: &Client, user: i32) -> Result<UserReport, HelpScoutError> {
self.user = user;
let res = client.get("reports/user.json", self)?;
let user = serde_json::from_value(res.clone())?;
Ok(user)
}
}