diff --git a/src/modes/server/api/item.rs b/src/modes/server/api/item.rs index 88dd1f7..2189a8c 100644 --- a/src/modes/server/api/item.rs +++ b/src/modes/server/api/item.rs @@ -508,127 +508,3 @@ pub async fn handle_get_item_meta( } } -pub async fn handle_get_item_latest( - State(state): State, - Query(params): Query, - headers: HeaderMap, - ConnectInfo(addr): ConnectInfo, -) -> Result>, StatusCode> { - if !check_auth(&headers, &state.password) { - warn!("Unauthorized request to /api/item/latest from {}", addr); - return Err(StatusCode::UNAUTHORIZED); - } - - let mut conn = state.db.lock().await; - - let item = if let Some(tags_str) = params.tags { - let tags: Vec = tags_str.split(',').map(|t| t.trim().to_string()).collect(); - db::get_item_matching(&mut *conn, &tags, &HashMap::new()) - .map_err(|e| { - warn!("Failed to get item matching tags {:?}: {}", tags, e); - StatusCode::INTERNAL_SERVER_ERROR - })? - } else { - db::get_item_last(&mut *conn).map_err(|e| { - warn!("Failed to get last item: {}", e); - StatusCode::INTERNAL_SERVER_ERROR - })? - }; - - if let Some(item) = item { - let item_tags = db::get_item_tags(&mut *conn, &item) - .map_err(|e| { - warn!("Failed to get tags for item {}: {}", item.id.unwrap_or(0), e); - StatusCode::INTERNAL_SERVER_ERROR - })? - .into_iter() - .map(|t| t.name) - .collect(); - let item_meta = db::get_item_meta(&mut *conn, &item) - .map_err(|e| { - warn!("Failed to get metadata for item {}: {}", item.id.unwrap_or(0), e); - StatusCode::INTERNAL_SERVER_ERROR - })? - .into_iter() - .map(|m| (m.name, m.value)) - .collect(); - - let item_info = ItemInfo { - id: item.id.unwrap_or(0), - ts: item.ts.to_rfc3339(), - size: item.size, - compression: item.compression, - tags: item_tags, - metadata: item_meta, - }; - - let response = ApiResponse { - success: true, - data: Some(item_info), - error: None, - }; - - Ok(Json(response)) - } else { - Err(StatusCode::NOT_FOUND) - } -} - -pub async fn handle_get_item( - State(state): State, - Path(item_id): Path, - headers: HeaderMap, - ConnectInfo(addr): ConnectInfo, -) -> Result>, StatusCode> { - if !check_auth(&headers, &state.password) { - warn!("Unauthorized request to /api/item/{} from {}", item_id, addr); - return Err(StatusCode::UNAUTHORIZED); - } - - if let Ok(id) = item_id.parse::() { - let mut conn = state.db.lock().await; - - if let Some(item) = db::get_item(&mut *conn, id).map_err(|e| { - warn!("Failed to get item {}: {}", id, e); - StatusCode::INTERNAL_SERVER_ERROR - })? { - let item_tags = db::get_item_tags(&mut *conn, &item) - .map_err(|e| { - warn!("Failed to get tags for item {}: {}", id, e); - StatusCode::INTERNAL_SERVER_ERROR - })? - .into_iter() - .map(|t| t.name) - .collect(); - let item_meta = db::get_item_meta(&mut *conn, &item) - .map_err(|e| { - warn!("Failed to get metadata for item {}: {}", id, e); - StatusCode::INTERNAL_SERVER_ERROR - })? - .into_iter() - .map(|m| (m.name, m.value)) - .collect(); - - let item_info = ItemInfo { - id, - ts: item.ts.to_rfc3339(), - size: item.size, - compression: item.compression, - tags: item_tags, - metadata: item_meta, - }; - - let response = ApiResponse { - success: true, - data: Some(item_info), - error: None, - }; - - Ok(Json(response)) - } else { - Err(StatusCode::NOT_FOUND) - } - } else { - Err(StatusCode::BAD_REQUEST) - } -} diff --git a/src/modes/server/api/mod.rs b/src/modes/server/api/mod.rs index b5c3d67..34a11e4 100644 --- a/src/modes/server/api/mod.rs +++ b/src/modes/server/api/mod.rs @@ -15,10 +15,10 @@ pub fn add_routes(router: Router) -> Router { // Item endpoints .route("/api/item/", get(item::handle_list_items).post(item::handle_post_item)) - .route("/api/item/latest", get(item::handle_get_item_latest)) + .route("/api/item/latest", get(item::handle_get_content_latest)) .route("/api/item/latest/meta", get(item::handle_get_item_latest_meta)) - .route("/api/item/latest/content", get(item::handle_get_content_latest)) - .route("/api/item/:id", get(item::handle_get_item).delete(item::handle_delete_item)) + .route("/api/item/latest/content", get(item::handle_get_content_latest_raw)) + .route("/api/item/:id", get(item::handle_get_content).delete(item::handle_delete_item)) .route("/api/item/:id/meta", get(item::handle_get_item_meta)) - .route("/api/item/:id/content", get(item::handle_get_content)) + .route("/api/item/:id/content", get(item::handle_get_content_raw)) }