refactor: rename item API endpoints for clarity and consistency
This commit is contained in:
committed by
Andrew Phillips (aider)
parent
5ea70fabbc
commit
8037105d86
@@ -508,127 +508,3 @@ pub async fn handle_get_item_meta(
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn handle_get_item_latest(
|
||||
State(state): State<AppState>,
|
||||
Query(params): Query<TagsQuery>,
|
||||
headers: HeaderMap,
|
||||
ConnectInfo(addr): ConnectInfo<SocketAddr>,
|
||||
) -> Result<Json<ApiResponse<ItemInfo>>, 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<String> = 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<AppState>,
|
||||
Path(item_id): Path<String>,
|
||||
headers: HeaderMap,
|
||||
ConnectInfo(addr): ConnectInfo<SocketAddr>,
|
||||
) -> Result<Json<ApiResponse<ItemInfo>>, 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::<i64>() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ pub fn add_routes(router: Router<AppState>) -> Router<AppState> {
|
||||
|
||||
// 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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user