diff --git a/server/src/models/bulk.rs b/server/src/models/bulk.rs index 6dca74f..a4e5bb4 100644 --- a/server/src/models/bulk.rs +++ b/server/src/models/bulk.rs @@ -4,7 +4,7 @@ use utoipa::ToSchema; use crate::models::error::ErrorResponse; use crate::routes::profile_http_error_mapper; -#[derive(serde::Serialize)] +#[derive(Debug, serde::Serialize)] #[serde(tag = "type")] pub enum BulkResponse { #[serde(rename = "success")] diff --git a/server/src/routes/universal.rs b/server/src/routes/universal.rs index ca33949..7ab9ae5 100644 --- a/server/src/routes/universal.rs +++ b/server/src/routes/universal.rs @@ -12,9 +12,9 @@ use enstate_shared::core::error::ProfileError; use enstate_shared::core::lookup_data::{LookupInfo, NameParseError}; use enstate_shared::core::{ENSService, Profile}; use futures::future::join_all; -use futures::TryFutureExt; use serde::Deserialize; use tokio_stream::wrappers::UnboundedReceiverStream; +use tracing::info; use crate::models::bulk::{BulkResponse, ListResponse}; use crate::routes::{profile_http_error_mapper, validate_bulk_input, FreshQuery, Qs, RouteError}; @@ -91,7 +91,11 @@ pub async fn get_bulk( Ok(Json(joined)) } -struct SSEResponse {} +#[derive(Debug, serde::Serialize)] +struct SSEResponse { + query: String, + response: BulkResponse, +} pub async fn get_bulk_sse( Qs(query): Qs, @@ -100,6 +104,8 @@ pub async fn get_bulk_sse( // TODO: let queries = validate_bulk_input(&query.queries, 10).unwrap(); + info!("Got SSE request: {} entries", queries.len()); + let (event_tx, event_rx) = tokio::sync::mpsc::unbounded_channel::>(); for input in queries { @@ -107,17 +113,20 @@ pub async fn get_bulk_sse( let event_tx_clone = event_tx.clone(); tokio::spawn(async move { let profile = profile_from_lookup_guess( - LookupInfo::guess(input), + LookupInfo::guess(&input), &state_clone.service, query.fresh.fresh, ) - .await; + .await + .map_err(profile_http_error_mapper); - let json = match profile { - Ok(profile) => serde_json::to_string(&profile).expect("a"), - Err(err) => serde_json::to_string(&profile_http_error_mapper(err)).expect("b"), + let sse_response = SSEResponse { + query: input, + response: profile.into(), }; + let json = serde_json::to_string(&sse_response).expect("to_string should've succeeded"); + event_tx_clone.send(Ok(Event::default().data(json))) }); }