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