Skip to content

Commit feb65b7

Browse files
committed
support fetching chart data, rename reports -> user_insights
1 parent 0d351ca commit feb65b7

8 files changed

Lines changed: 205 additions & 73 deletions

File tree

src/apis/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ pub mod auth_service_api;
7575
pub mod employee_service_api;
7676
pub mod mfa_service_api;
7777
pub mod org_service_api;
78-
pub(crate) mod report_service_api;
78+
pub(crate) mod user_insights_service_api;
7979
pub mod user_service_api;
8080

8181
pub mod configuration;
Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ use reqwest;
1212

1313
use super::{configuration, Error};
1414
use crate::apis::ResponseContent;
15-
use crate::models::reports::{
16-
FetchReportQuery, OrgReport, OrgReportType, UserReportPage, UserReportType,
15+
use crate::models::user_insights::{
16+
ChartData, ChartMetric, FetchChartDataQuery, FetchReportQuery, OrgReport, OrgReportType,
17+
UserReportPage, UserReportType,
1718
};
1819
use crate::propelauth::auth::AUTH_HOSTNAME_HEADER;
1920

2021
/// struct for typed errors of methods [`fetch_user_report`] or [`fetch_org_report`]
2122
#[derive(Debug, Clone, Serialize, Deserialize)]
2223
#[serde(untagged)]
23-
pub enum FetchReportRequestError {
24+
pub enum FetchUserInsightsDataRequestError {
2425
Status401(serde_json::Value),
2526
Status400(serde_json::Value),
2627
Status429(serde_json::Value),
@@ -31,7 +32,7 @@ pub(crate) async fn fetch_user_report(
3132
configuration: &configuration::Configuration,
3233
report_key: UserReportType,
3334
params: FetchReportQuery,
34-
) -> Result<UserReportPage, Error<FetchReportRequestError>> {
35+
) -> Result<UserReportPage, Error<FetchUserInsightsDataRequestError>> {
3536
let local_var_configuration = configuration;
3637

3738
let local_var_client = &local_var_configuration.client;
@@ -67,9 +68,9 @@ pub(crate) async fn fetch_user_report(
6768
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
6869
serde_json::from_str(&local_var_content).map_err(Error::from)
6970
} else {
70-
let local_var_entity: Option<FetchReportRequestError> =
71+
let local_var_entity: Option<FetchUserInsightsDataRequestError> =
7172
serde_json::from_str(&local_var_content).ok();
72-
let local_var_error: crate::apis::ResponseContent<FetchReportRequestError> =
73+
let local_var_error: crate::apis::ResponseContent<FetchUserInsightsDataRequestError> =
7374
ResponseContent {
7475
status: local_var_status,
7576
content: local_var_content,
@@ -83,7 +84,7 @@ pub(crate) async fn fetch_org_report(
8384
configuration: &configuration::Configuration,
8485
report_key: OrgReportType,
8586
params: FetchReportQuery,
86-
) -> Result<OrgReport, Error<FetchReportRequestError>> {
87+
) -> Result<OrgReport, Error<FetchUserInsightsDataRequestError>> {
8788
let local_var_configuration = configuration;
8889

8990
let local_var_client = &local_var_configuration.client;
@@ -119,9 +120,61 @@ pub(crate) async fn fetch_org_report(
119120
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
120121
serde_json::from_str(&local_var_content).map_err(Error::from)
121122
} else {
122-
let local_var_entity: Option<FetchReportRequestError> =
123+
let local_var_entity: Option<FetchUserInsightsDataRequestError> =
123124
serde_json::from_str(&local_var_content).ok();
124-
let local_var_error: crate::apis::ResponseContent<FetchReportRequestError> =
125+
let local_var_error: crate::apis::ResponseContent<FetchUserInsightsDataRequestError> =
126+
ResponseContent {
127+
status: local_var_status,
128+
content: local_var_content,
129+
entity: local_var_entity,
130+
};
131+
Err(Error::ResponseError(local_var_error))
132+
}
133+
}
134+
135+
pub(crate) async fn fetch_chart_metric_data(
136+
configuration: &configuration::Configuration,
137+
chart_metric: ChartMetric,
138+
params: FetchChartDataQuery,
139+
) -> Result<ChartData, Error<FetchUserInsightsDataRequestError>> {
140+
let local_var_configuration = configuration;
141+
142+
let local_var_client = &local_var_configuration.client;
143+
144+
let local_var_uri_str = format!(
145+
"{}/api/backend/v1/chart_metrics/{chart_metric}",
146+
local_var_configuration.base_path,
147+
chart_metric = chart_metric.as_str(),
148+
);
149+
let mut local_var_req_builder =
150+
local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
151+
152+
local_var_req_builder = local_var_req_builder.query(&params);
153+
154+
if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
155+
local_var_req_builder =
156+
local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
157+
}
158+
if let Some(ref local_var_token) = local_var_configuration.bearer_access_token {
159+
local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
160+
};
161+
local_var_req_builder = local_var_req_builder.header(
162+
AUTH_HOSTNAME_HEADER,
163+
local_var_configuration.auth_hostname.to_owned(),
164+
);
165+
166+
let local_var_req = local_var_req_builder.build()?;
167+
let local_var_resp = local_var_client.execute(local_var_req).await?;
168+
169+
let local_var_status = local_var_resp.status();
170+
let local_var_content = local_var_resp.text().await?;
171+
172+
if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
173+
serde_json::from_str(&local_var_content).map_err(Error::from)
174+
} else {
175+
let local_var_entity: Option<FetchUserInsightsDataRequestError> =
176+
serde_json::from_str(&local_var_content).ok();
177+
let local_var_error: crate::apis::ResponseContent<FetchUserInsightsDataRequestError> =
125178
ResponseContent {
126179
status: local_var_status,
127180
content: local_var_content,

src/models/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ pub mod user_ids_query;
8989
pub use self::user_ids_query::UserIdsQuery;
9090
pub mod user_in_org;
9191
pub use self::user_in_org::UserInOrg;
92-
pub mod reports;
92+
pub mod user_insights;
9393
pub mod user_metadata;
9494
pub use self::user_metadata::UserMetadata;
9595
pub mod user_paged_response;
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,57 @@ pub struct UserReportPage {
166166
pub has_more_results: bool,
167167
pub report_time: i64,
168168
}
169+
// chart metrics types
170+
171+
#[derive(Clone, Debug, PartialEq, Deserialize)]
172+
pub enum ChartMetric {
173+
Signups,
174+
OrgsCreated,
175+
ActiveUsers,
176+
ActiveOrgs,
177+
}
178+
179+
impl ChartMetric {
180+
pub fn as_str(&self) -> &'static str {
181+
match self {
182+
ChartMetric::Signups => "signups",
183+
ChartMetric::OrgsCreated => "orgs_created",
184+
ChartMetric::ActiveUsers => "active_users",
185+
ChartMetric::ActiveOrgs => "active_orgs",
186+
}
187+
}
188+
}
189+
190+
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
191+
pub enum ChartMetricCadence {
192+
#[serde(rename = "Daily")]
193+
Daily,
194+
#[serde(rename = "Weekly")]
195+
Weekly,
196+
#[serde(rename = "Monthly")]
197+
Monthly,
198+
}
199+
200+
#[derive(Debug, Clone, Deserialize)]
201+
pub struct ChartDataPoint {
202+
pub result: i64,
203+
pub date: String, // YYYY-MM-DD format date, 24 hours in UTC timezone
204+
pub cadence_completed: bool,
205+
}
206+
207+
#[derive(Debug, Clone, Deserialize)]
208+
pub struct ChartData {
209+
pub metrics: Vec<ChartDataPoint>,
210+
pub chart_type: ChartMetric,
211+
pub cadence: ChartMetricCadence,
212+
}
213+
214+
#[derive(Clone, Debug, PartialEq, Serialize)]
215+
pub struct FetchChartDataQuery {
216+
#[serde(skip_serializing_if = "Option::is_none", rename = "cadence")]
217+
pub cadence: Option<ChartMetricCadence>,
218+
#[serde(skip_serializing_if = "Option::is_none", rename = "start_date")]
219+
pub start_date: Option<String>, // YYYY-MM-DD format date
220+
#[serde(skip_serializing_if = "Option::is_none", rename = "end_date")]
221+
pub end_date: Option<String>, // YYYY-MM-DD format date
222+
}

src/propelauth/auth.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ use crate::propelauth::helpers::map_autogenerated_error;
1111
use crate::propelauth::mfa::MfaService;
1212
use crate::propelauth::options::{AuthOptions, AuthOptionsWithTokenVerification};
1313
use crate::propelauth::org::OrgService;
14-
use crate::propelauth::reports::ReportService;
1514
use crate::propelauth::token::TokenService;
1615
use crate::propelauth::user::UserService;
16+
use crate::propelauth::user_insights::UserInsightsService;
1717

1818
static BACKEND_API_BASE_URL: &str = "https://propelauth-api.com";
1919
pub(crate) static AUTH_HOSTNAME_HEADER: &str = "X-Propelauth-url";
@@ -132,9 +132,9 @@ impl PropelAuth {
132132
}
133133
}
134134

135-
/// API requests related to reports.
136-
pub fn reports(&self) -> ReportService {
137-
ReportService {
135+
/// API requests related to user insights data.
136+
pub fn user_insights(&self) -> UserInsightsService {
137+
UserInsightsService {
138138
config: &self.config,
139139
}
140140
}

src/propelauth/errors.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ pub enum VerifySmsChallengeError {
512512
}
513513

514514
#[derive(Error, Debug, PartialEq, Clone)]
515-
pub enum FetchReportError {
515+
pub enum FetchUserInsightsError {
516516
#[error("Invalid API Key")]
517517
InvalidApiKey,
518518

src/propelauth/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ pub(crate) mod helpers;
77
pub mod mfa;
88
pub mod options;
99
pub mod org;
10-
pub mod reports;
1110
pub mod token;
1211
pub mod token_models;
1312
pub mod user;
13+
pub mod user_insights;

0 commit comments

Comments
 (0)