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