systemprompt_models/api/cloud/
tenant.rs1use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename_all = "snake_case")]
12pub enum SubscriptionStatus {
13 Active,
14 Trialing,
15 PastDue,
16 Paused,
17 Canceled,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct CloudPlanInfo {
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub id: Option<String>,
24 pub name: String,
25 pub memory_mb: i32,
26 pub volume_gb: i32,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
30pub struct CloudPlan {
31 pub id: String,
32 pub name: String,
33 pub paddle_price_id: systemprompt_identifiers::PriceId,
34 #[serde(default)]
35 pub memory_mb_default: i32,
36 #[serde(default)]
37 pub volume_gb: i32,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub max_tenants: Option<i32>,
40}
41
42#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
43#[serde(rename_all = "snake_case")]
44pub enum CloudTenantStatus {
45 Pending,
46 Active,
47 Suspended,
48 Deleted,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct CloudTenantInfo {
53 pub id: String,
54 pub name: String,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub subscription_id: Option<String>,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub subscription_status: Option<SubscriptionStatus>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub app_id: Option<String>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub hostname: Option<String>,
63 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub region: Option<String>,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub status: Option<CloudTenantStatus>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
68 pub plan: Option<CloudPlanInfo>,
69 #[serde(default)]
70 pub external_db_access: bool,
71 pub database_url: String,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
75pub struct CloudTenant {
76 pub id: String,
77 pub name: String,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub fly_app_name: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub fly_hostname: Option<String>,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub hostname: Option<String>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
87pub struct CloudTenantStatusResponse {
88 pub status: String,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub message: Option<String>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub app_url: Option<String>,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub secrets_url: Option<String>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct CloudTenantSecrets {
99 pub database_url: String,
100 pub internal_database_url: String,
101 pub app_url: String,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub anthropic_api_key: Option<String>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub openai_api_key: Option<String>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub gemini_api_key: Option<String>,
108}
109
110#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
111pub struct SetExternalDbAccessRequest {
112 pub enabled: bool,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct ExternalDbAccessResponse {
117 pub tenant_id: systemprompt_identifiers::TenantId,
118 pub external_db_access: bool,
119 pub database_url: String,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
123pub struct RotateCredentialsResponse {
124 pub status: String,
125 pub message: String,
126 pub internal_database_url: String,
127 pub external_database_url: String,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct CloudEnterpriseLicenseInfo {
132 pub id: String,
133 pub name: String,
134 pub domain: String,
135 #[serde(default, skip_serializing_if = "Option::is_none")]
136 pub plan: Option<CloudPlanInfo>,
137}