use crate::server::AppState;
use axum::{
extract::{Query, State},
http::StatusCode,
Json,
};
use otelite_core::api::ErrorResponse;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize)]
pub struct ResourceKeysQuery {
pub signal: String,
}
#[derive(Debug, Serialize)]
pub struct ResourceKeysResponse {
pub keys: Vec<String>,
}
pub async fn get_resource_keys(
State(state): State<AppState>,
Query(params): Query<ResourceKeysQuery>,
) -> Result<Json<ResourceKeysResponse>, (StatusCode, Json<ErrorResponse>)> {
let keys = state
.storage
.distinct_resource_keys(¶ms.signal)
.await
.map_err(|e| {
(
StatusCode::INTERNAL_SERVER_ERROR,
Json(ErrorResponse::storage_error(format!(
"distinct resource keys: {}",
e
))),
)
})?;
Ok(Json(ResourceKeysResponse { keys }))
}