systemprompt_cloud/api_client/
endpoints.rs1use chrono::Utc;
4use systemprompt_identifiers::{PriceId, UserId};
5use systemprompt_models::modules::ApiPaths;
6
7use super::CloudApiClient;
8use super::types::{
9 ActivityData, ActivityRequest, CheckoutRequest, CheckoutResponse, ListResponse, Plan, Tenant,
10 UserMeResponse,
11};
12use crate::error::CloudResult;
13
14impl CloudApiClient {
15 pub async fn get_user(&self) -> CloudResult<UserMeResponse> {
16 self.get(ApiPaths::AUTH_ME).await
17 }
18
19 pub async fn list_tenants(&self) -> CloudResult<Vec<Tenant>> {
20 let response: ListResponse<Tenant> = self.get(ApiPaths::CLOUD_TENANTS).await?;
21 Ok(response.data)
22 }
23
24 pub async fn get_plans(&self) -> CloudResult<Vec<Plan>> {
25 let plans: Vec<Plan> = self.get(ApiPaths::CLOUD_CHECKOUT_PLANS).await?;
26 Ok(plans)
27 }
28
29 pub async fn create_checkout(
30 &self,
31 price_id: &PriceId,
32 region: &str,
33 redirect_uri: Option<&str>,
34 ) -> CloudResult<CheckoutResponse> {
35 let request = CheckoutRequest {
36 price_id: price_id.clone(),
37 region: region.to_string(),
38 redirect_uri: redirect_uri.map(String::from),
39 };
40 self.post(ApiPaths::CLOUD_CHECKOUT, &request).await
41 }
42
43 pub async fn report_activity(&self, event_type: &str, user_id: &UserId) -> CloudResult<()> {
44 let request = ActivityRequest {
45 event: event_type.to_string(),
46 timestamp: Utc::now().to_rfc3339(),
47 data: ActivityData {
48 user_id: user_id.clone(),
49 },
50 };
51 self.post_no_response(ApiPaths::CLOUD_ACTIVITY, &request)
52 .await
53 }
54}