Skip to main content

systemprompt_models/api/cloud/
provisioning.rs

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