omni_orchestrator/schemas/v1/models/
app.rs1use serde::{Deserialize, Serialize};
2use chrono::{DateTime, Utc};
3use sqlx::Row;
4
5use super::instance::Instance;
7
8#[derive(Debug, sqlx::FromRow, Serialize)]
9pub struct App {
10 pub id: i64,
11 pub name: String,
12 pub org_id: i64,
13 pub git_repo: Option<String>,
14 pub region_id: Option<i64>,
15 pub created_at: DateTime<Utc>,
16 pub updated_at: DateTime<Utc>,
17 pub git_branch: Option<String>,
18 pub maintenance_mode: bool,
19 pub container_image_url: Option<String>,
20}
21
22#[derive(Debug, Serialize)]
23pub struct AppWithInstanceCount {
24 #[serde(flatten)]
25 app_data: App,
26 instance_count: i64,
27}
28
29
30#[derive(Debug, Serialize)]
32pub struct AppWithInstances {
33 #[serde(flatten)]
34 pub app: App,
35 pub instances: Vec<Instance>,
36}
37
38impl<'r> sqlx::FromRow<'r, sqlx::mysql::MySqlRow> for AppWithInstanceCount {
39 fn from_row(row: &'r sqlx::mysql::MySqlRow) -> Result<Self, sqlx::Error> {
40 Ok(AppWithInstanceCount {
41 app_data: App::from_row(row)?,
42 instance_count: row.try_get::<i64, _>("instance_count")?,
43 })
44 }
45}