systemprompt_models/api/cloud/
provisioning.rs1use serde::{Deserialize, Serialize};
8use systemprompt_identifiers::{CheckoutSessionId, PriceId, TenantId, TransactionId, UserId};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename_all = "snake_case")]
12pub enum ProvisioningEventType {
13 SubscriptionCreated,
14 TenantCreated,
15 DatabaseCreated,
16 SecretsStored,
17 VmProvisioningStarted,
18 VmProvisioningProgress,
19 VmProvisioned,
20 SecretsConfigured,
21 InfrastructureReady,
22 TenantReady,
23 ProvisioningFailed,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct ProvisioningEvent {
28 pub tenant_id: TenantId,
29 pub event_type: ProvisioningEventType,
30 pub status: String,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub message: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub app_url: Option<String>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub fly_app_name: Option<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct CheckoutEvent {
41 pub checkout_session_id: CheckoutSessionId,
42 pub tenant_id: TenantId,
43 pub tenant_name: String,
44 pub event_type: ProvisioningEventType,
45 pub status: String,
46 #[serde(default, skip_serializing_if = "Option::is_none")]
47 pub message: Option<String>,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub app_url: Option<String>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub fly_app_name: Option<String>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct CheckoutRequest {
56 pub price_id: PriceId,
57 pub region: String,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub redirect_uri: Option<String>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct CheckoutResponse {
64 pub checkout_url: String,
65 pub transaction_id: TransactionId,
66 pub checkout_session_id: CheckoutSessionId,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct DeployResponse {
71 pub status: String,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub app_url: Option<String>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct ActivityRequest {
78 pub event: String,
79 pub timestamp: String,
80 pub data: ActivityData,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct ActivityData {
85 pub user_id: UserId,
86}