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
|
// Item endpoints
|
||||||
.route("/api/item/", get(item::handle_list_items).post(item::handle_post_item))
|
.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/meta", get(item::handle_get_item_latest_meta))
|
||||||
.route("/api/item/latest/content", get(item::handle_get_content_latest))
|
.route("/api/item/latest/content", get(item::handle_get_content_latest_raw))
|
||||||
.route("/api/item/:id", get(item::handle_get_item).delete(item::handle_delete_item))
|
.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/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