use crate::{Filters, Timestamps, Umami, UmamiError, website_stats::StatsWithComparison};
pub struct GetStatsRequestBuilder<'a> {
client: &'a Umami,
website_id: String,
timestamps: Timestamps,
filters: Filters,
}
impl<'a> GetStatsRequestBuilder<'a> {
pub fn new(client: &'a Umami, website_id: String, timestamps: Timestamps) -> Self {
Self { client, website_id, timestamps, filters: Filters::default() }
}
pub fn filters(mut self, filters: Filters) -> Self {
self.filters = filters;
self
}
pub async fn fetch(self) -> Result<StatsWithComparison, UmamiError> {
let url = format!("websites/{}/stats", self.website_id);
let mut filters = self.filters.as_parameters();
let timestamps: Vec<_> = vec![
("startAt", self.timestamps.start_at.timestamp_millis().to_string()),
("endAt", self.timestamps.end_at.timestamp_millis().to_string()),
];
filters.extend(timestamps);
self.client.request::<StatsWithComparison, _>("get", &url, filters).await
}
}