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//!
4//! Copyright (c) systemprompt.io — Business Source License 1.1.
5//! See <https://systemprompt.io> for licensing details.
6
7use 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}