systemprompt_models/api/cloud/
provisioning.rs1use 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}