use async_graphql::*;
use chrono::{DateTime, Utc};
#[derive(Debug, Clone, SimpleObject)]
pub struct Neighbor {
pub segment_id: ID,
pub recording_id: ID,
pub similarity: f32,
pub distance: f32,
pub start_time: f64,
pub end_time: f64,
pub species: Option<Species>,
}
#[derive(Debug, Clone, SimpleObject)]
pub struct Species {
pub common_name: String,
pub scientific_name: Option<String>,
pub confidence: f32,
}
#[derive(Debug, Clone, SimpleObject)]
pub struct Cluster {
pub id: ID,
pub label: Option<String>,
pub size: i32,
pub density: f32,
pub exemplar_ids: Vec<ID>,
pub species_distribution: Vec<SpeciesCount>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, SimpleObject)]
pub struct SpeciesCount {
pub name: String,
pub scientific_name: Option<String>,
pub count: i32,
pub percentage: f64,
}
#[derive(Debug, Clone, SimpleObject)]
pub struct ProcessingUpdate {
pub recording_id: ID,
pub status: ProcessingStatusGql,
pub progress: f32,
pub message: Option<String>,
}
#[derive(Debug, Clone, SimpleObject)]
pub struct HealthStatus {
pub status: String,
pub version: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Enum)]
pub enum ProcessingStatusGql {
Queued,
Loading,
Segmenting,
Embedding,
Indexing,
Analyzing,
Complete,
Failed,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_processing_status_enum() {
let status = ProcessingStatusGql::Embedding;
assert_eq!(status, ProcessingStatusGql::Embedding);
}
}