fix: resolve compilation errors in API paths, file descriptors, and router merging
Co-authored-by: aider (openai/andrew/openrouter/qwen/qwen3-coder) <aider@aider.chat>
This commit is contained in:
@@ -161,7 +161,7 @@ pub async fn handle_post_item(
|
||||
|
||||
#[utoipa::path(
|
||||
delete,
|
||||
path = "/api/item/{item_id}",
|
||||
path = "/api/item/{id}",
|
||||
responses(
|
||||
(status = 200, description = "Successfully deleted item", body = ApiResponse<()>),
|
||||
(status = 401, description = "Unauthorized"),
|
||||
@@ -169,7 +169,7 @@ pub async fn handle_post_item(
|
||||
(status = 500, description = "Internal server error")
|
||||
),
|
||||
params(
|
||||
("item_id" = String, Path, description = "ID of the item to delete")
|
||||
("id" = i64, Path, description = "ID of the item to delete")
|
||||
),
|
||||
security(
|
||||
("bearerAuth" = [])
|
||||
@@ -177,16 +177,41 @@ pub async fn handle_post_item(
|
||||
)]
|
||||
pub async fn handle_delete_item(
|
||||
State(state): State<AppState>,
|
||||
Path(item_id): Path<String>,
|
||||
Path(id): Path<i64>,
|
||||
headers: HeaderMap,
|
||||
ConnectInfo(addr): ConnectInfo<SocketAddr>,
|
||||
) -> Result<Json<ApiResponse<()>>, StatusCode> {
|
||||
if !check_auth(&headers, &state.password) {
|
||||
warn!("Unauthorized request to DELETE /api/item/{} from {}", item_id, addr);
|
||||
warn!("Unauthorized request to DELETE /api/item/{} from {}", id, addr);
|
||||
return Err(StatusCode::UNAUTHORIZED);
|
||||
}
|
||||
|
||||
if let Ok(id) = item_id.parse::<i64>() {
|
||||
// Validate that item ID is positive to prevent path traversal issues
|
||||
if id <= 0 {
|
||||
warn!("Invalid item ID {} from {}", id, addr);
|
||||
return Err(StatusCode::BAD_REQUEST);
|
||||
}
|
||||
|
||||
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 {} for deletion: {}", id, e);
|
||||
StatusCode::INTERNAL_SERVER_ERROR
|
||||
})? {
|
||||
db::delete_item(&mut *conn, item).map_err(|e| {
|
||||
warn!("Failed to delete item {}: {}", id, e);
|
||||
StatusCode::INTERNAL_SERVER_ERROR
|
||||
})?;
|
||||
|
||||
let response = ApiResponse::<()> {
|
||||
success: true,
|
||||
data: None,
|
||||
error: None,
|
||||
};
|
||||
Ok(Json(response))
|
||||
} else {
|
||||
Err(StatusCode::NOT_FOUND)
|
||||
}
|
||||
let mut conn = state.db.lock().await;
|
||||
|
||||
if let Some(item) = db::get_item(&mut *conn, id).map_err(|e| {
|
||||
|
||||
@@ -53,8 +53,8 @@ pub fn add_routes(router: Router<AppState>) -> Router<AppState> {
|
||||
}
|
||||
|
||||
pub fn add_docs_routes(router: Router<AppState>) -> Router<AppState> {
|
||||
router
|
||||
.merge(SwaggerUi::new("/swagger-ui")
|
||||
.url("/api-docs/openapi.json", ApiDoc::openapi())
|
||||
.into())
|
||||
router.merge(
|
||||
SwaggerUi::new("/swagger-ui")
|
||||
.url("/api-docs/openapi.json", ApiDoc::openapi())
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user