Skip to content

Commit 37615c2

Browse files
committed
Refactoring WIP
1 parent aa62e71 commit 37615c2

File tree

23 files changed

+2230
-1845
lines changed

23 files changed

+2230
-1845
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ tower-http = { version = "0.6", features = ["fs", "trace", "cors"] }
6060
tracing = "0.1"
6161
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
6262
utoipa = { version = "5", features = ["axum_extras", "chrono", "uuid"] }
63-
utoipa-swagger-ui = { version = "9", features = ["axum"] }
6463
uuid = { version = "1.11", features = ["v4", "v7", "serde", "js"] }
6564
utoipa-axum = { version = "0.2" }
6665
pulldown-cmark = "0.12"

crates/observation-tools-server/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ tracing-subscriber.workspace = true
4141
tracing.workspace = true
4242
utoipa.workspace = true
4343
utoipa-axum.workspace = true
44-
utoipa-swagger-ui.workspace = true
4544
uuid.workspace = true
4645
pulldown-cmark.workspace = true
4746
ammonia.workspace = true

crates/observation-tools-server/src/api/observations/create.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::api::types::CreateObservationsResponse;
44
use crate::api::AppError;
55
use crate::storage::BlobStorage;
66
use crate::storage::MetadataStorage;
7-
use crate::storage::ObservationWithPayloads;
87
use crate::storage::PayloadData;
98
use crate::storage::StoredPayload;
109
use axum::extract::Multipart;
@@ -107,8 +106,9 @@ pub async fn create_observations(
107106
})
108107
.unwrap_or_default();
109108

110-
// Build ObservationWithPayloads for each observation by collecting all matching payloads
111-
let mut observations_with_payloads = Vec::with_capacity(observations.len());
109+
// Collect payloads per observation
110+
let mut payloads_per_obs: Vec<(observation_tools_shared::ObservationId, Vec<StoredPayload>)> =
111+
Vec::with_capacity(observations.len());
112112

113113
for obs in &observations {
114114
let obs_id_str = obs.id.to_string();
@@ -165,10 +165,7 @@ pub async fn create_observations(
165165
)));
166166
}
167167

168-
observations_with_payloads.push(ObservationWithPayloads {
169-
observation: obs.clone(),
170-
payloads: obs_payloads,
171-
});
168+
payloads_per_obs.push((obs.id, obs_payloads));
172169
}
173170

174171
// Warn about any orphaned payloads
@@ -179,13 +176,16 @@ pub async fn create_observations(
179176
);
180177
}
181178

182-
metadata
183-
.store_observations(observations_with_payloads)
184-
.await?;
179+
let obs_count = observations.len();
180+
metadata.store_observations(observations).await?;
181+
182+
for (obs_id, obs_payloads) in &payloads_per_obs {
183+
metadata.store_payloads(obs_id, obs_payloads).await?;
184+
}
185185

186186
tracing::info!(
187187
execution_id = %execution_id,
188-
count = observations.len(),
188+
count = obs_count,
189189
"Observations created successfully"
190190
);
191191

crates/observation-tools-server/src/api/observations/get.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
33
use crate::api::AppError;
44
use crate::storage::MetadataStorage;
5-
use crate::storage::ObservationWithPayloads;
65
use crate::storage::PayloadData;
76
use crate::storage::StoredPayload;
87
use axum::extract::Path;
@@ -39,11 +38,10 @@ pub struct GetPayload {
3938
}
4039

4140
impl GetObservation {
42-
pub fn new(obs: ObservationWithPayloads) -> GetObservation {
43-
let exec_id = obs.observation.execution_id;
44-
let obs_id = obs.observation.id;
45-
let payloads = obs
46-
.payloads
41+
pub fn new(observation: Observation, stored_payloads: Vec<StoredPayload>) -> GetObservation {
42+
let exec_id = observation.execution_id;
43+
let obs_id = observation.id;
44+
let payloads = stored_payloads
4745
.into_iter()
4846
.map(|p| {
4947
let id = p.id.clone();
@@ -60,7 +58,7 @@ impl GetObservation {
6058
})
6159
.collect();
6260
GetObservation {
63-
observation: obs.observation,
61+
observation,
6462
payloads,
6563
}
6664
}
@@ -148,7 +146,8 @@ pub async fn get_observation(
148146
let _execution_id = ExecutionId::parse(&execution_id)?;
149147
let observation_id = ObservationId::parse(&observation_id)?;
150148
let observation = metadata.get_observation(observation_id).await?;
149+
let payloads = metadata.get_all_payloads(observation_id).await?;
151150
Ok(Json(GetObservationResponse {
152-
observation: GetObservation::new(observation),
151+
observation: GetObservation::new(observation, payloads),
153152
}))
154153
}

crates/observation-tools-server/src/api/observations/get_blob.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,10 @@ pub async fn get_observation_blob(
3939
) -> Result<impl IntoResponse, AppError> {
4040
let observation_id = ObservationId::parse(&observation_id)?;
4141
let payload_id = PayloadId::from(payload_id);
42-
let observation = metadata.get_observation(observation_id).await?;
42+
let payloads = metadata.get_all_payloads(observation_id).await?;
4343

4444
// Find the payload in the manifest
45-
let payload = observation
46-
.payloads
45+
let payload = payloads
4746
.iter()
4847
.find(|p| p.id == payload_id)
4948
.ok_or_else(|| {
@@ -97,10 +96,10 @@ pub async fn get_observation_blob_legacy(
9796
Path((_execution_id, observation_id)): Path<(String, String)>,
9897
) -> Result<impl IntoResponse, AppError> {
9998
let observation_id = ObservationId::parse(&observation_id)?;
100-
let observation = metadata.get_observation(observation_id).await?;
99+
let payloads = metadata.get_all_payloads(observation_id).await?;
101100

102101
// Use the first payload
103-
let payload = observation.payloads.first().ok_or_else(|| {
102+
let payload = payloads.first().ok_or_else(|| {
104103
StorageError::NotFound(format!(
105104
"No payloads found for observation {}",
106105
observation_id

crates/observation-tools-server/src/api/observations/list.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ pub async fn list_observations(
5050
) -> Result<Json<ListObservationsResponse>, AppError> {
5151
let execution_id = ExecutionId::parse(&execution_id)?;
5252
let page = metadata
53-
.get_observations(execution_id, query.page_token)
53+
.get_observations(execution_id, query.page_token, None)
5454
.await?;
5555
let has_next_page = page.pagination.next_page_token.is_some();
5656
Ok(Json(ListObservationsResponse {
5757
observations: page
5858
.observations
5959
.into_iter()
60-
.map(GetObservation::new)
60+
.map(|obs| GetObservation::new(obs.observation, obs.payloads))
6161
.collect(),
6262
has_next_page,
6363
next_page_token: page.pagination.next_page_token,

crates/observation-tools-server/src/server.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use tower_http::trace::TraceLayer;
1414
use tracing::debug;
1515
use tracing::info;
1616
use tracing::warn;
17-
use utoipa_swagger_ui::SwaggerUi;
1817

1918
/// The Observation Tools server
2019
pub struct Server {
@@ -72,7 +71,6 @@ impl Server {
7271
let app = Router::new()
7372
.merge(ui_router)
7473
.merge(api_router)
75-
.merge(SwaggerUi::new("/api/swagger-ui").url("/api/openapi.json", openapi))
7674
.layer(TraceLayer::new_for_http())
7775
.with_state(state);
7876

0 commit comments

Comments
 (0)