use crate::client::Sentd;
use crate::error::Error;
use crate::types::*;
pub struct Analytics {
client: Sentd,
}
impl Analytics {
pub(crate) fn new(client: Sentd) -> Self {
Self { client }
}
pub async fn get(&self, params: Option<AnalyticsParams>) -> Result<AnalyticsResponse, Error> {
let mut query = String::from("/api/analytics");
if let Some(p) = params {
let mut parts = vec![];
if let Some(days) = p.days {
parts.push(format!("days={}", days));
}
if let Some(group_by) = p.group_by {
parts.push(format!("group_by={}", group_by));
}
if !parts.is_empty() {
query = format!("{}?{}", query, parts.join("&"));
}
}
self.client.get(&query).await
}
pub async fn export_csv(&self, days: Option<i32>) -> Result<String, Error> {
let mut query = String::from("/api/analytics/export?format=csv");
if let Some(d) = days {
query = format!("{}&days={}", query, d);
}
let response: ExportResponse = self.client.get(&query).await?;
Ok(response.data)
}
}
#[derive(Debug, Default)]
pub struct AnalyticsParams {
pub days: Option<i32>,
pub group_by: Option<String>,
}
#[derive(Debug, serde::Deserialize)]
struct ExportResponse {
data: String,
}