omni_orchestrator/schemas/v1/models/
app.rs

1use serde::{Deserialize, Serialize};
2use chrono::{DateTime, Utc};
3use sqlx::Row;
4
5// Internal imports
6use 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// Define the struct with flattening
31#[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}