Skip to main content

feagi_api/v1/
brain_region_dtos.rs

1// Copyright 2025 Neuraville Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4// Brain Region DTOs for V1 API
5//
6// These DTOs must match Python FastAPI response structures exactly.
7
8use serde::{Deserialize, Serialize};
9use utoipa::ToSchema;
10
11/// Brain region information (summary)
12#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
13#[schema(example = json!({
14    "region_id": "visual_cortex",
15    "name": "Visual Cortex",
16    "region_type": "Sensory",
17    "parent_id": "neocortex",
18    "cortical_areas": ["v1", "v2", "v4"],
19    "child_count": 3
20}))]
21pub struct BrainRegionSummary {
22    /// Brain region ID
23    pub region_id: String,
24
25    /// Human-readable name
26    pub name: String,
27
28    /// Functional type (Sensory, Motor, Association, Custom)
29    pub region_type: String,
30
31    /// Parent region ID (if any)
32    pub parent_id: Option<String>,
33
34    /// List of cortical area IDs in this region
35    pub cortical_areas: Vec<String>,
36
37    /// Number of child regions
38    pub child_count: usize,
39}
40
41/// Detailed brain region information
42#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
43#[schema(example = json!({
44    "region_id": "visual_cortex",
45    "name": "Visual Cortex",
46    "region_type": "Sensory",
47    "parent_id": "neocortex",
48    "cortical_areas": ["v1", "v2", "v4"],
49    "child_regions": ["primary_visual", "secondary_visual"],
50    "properties": {}
51}))]
52pub struct BrainRegionDetail {
53    /// Brain region ID
54    pub region_id: String,
55
56    /// Human-readable name
57    pub name: String,
58
59    /// Functional type
60    pub region_type: String,
61
62    /// Parent region ID
63    pub parent_id: Option<String>,
64
65    /// Cortical areas in this region
66    pub cortical_areas: Vec<String>,
67
68    /// Child region IDs
69    pub child_regions: Vec<String>,
70
71    /// Additional properties
72    pub properties: serde_json::Value,
73}
74
75/// Create brain region request
76#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
77pub struct CreateBrainRegionRequest {
78    /// Brain region ID
79    pub region_id: String,
80
81    /// Human-readable name
82    pub name: String,
83
84    /// Functional type
85    pub region_type: String,
86
87    /// Optional: Parent region ID
88    #[serde(default)]
89    pub parent_id: Option<String>,
90}
91
92/// List brain regions response
93#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
94pub struct BrainRegionListResponse {
95    /// List of brain regions
96    pub brain_regions: Vec<BrainRegionSummary>,
97
98    /// Total count
99    pub total_count: usize,
100}