use aws_lambda_events::apigw::{ApiGatewayProxyResponse, ApiGatewayWebsocketProxyRequest};
use lambda_runtime::{Error, LambdaEvent};
use tracing::{info, warn};
use crate::{SharedClients, delete_connection};
pub async fn handle_disconnect(
event: LambdaEvent<ApiGatewayWebsocketProxyRequest>,
clients: &SharedClients,
) -> Result<ApiGatewayProxyResponse, Error> {
let request_context = event.payload.request_context;
let connection_id = request_context
.connection_id
.ok_or("Missing connection ID")?;
info!("WebSocket connection disconnected: {}", connection_id);
match delete_connection(&clients.dynamodb, &connection_id).await {
Ok(_) => {
info!("Cleaned up connection metadata: {}", connection_id);
}
Err(e) => {
warn!(
"Failed to delete connection metadata for {}: {}",
connection_id, e
);
}
}
Ok(ApiGatewayProxyResponse {
status_code: 200,
headers: Default::default(),
multi_value_headers: Default::default(),
body: None,
is_base64_encoded: false,
})
}
#[cfg(test)]
mod tests {
#[test]
fn test_disconnect_handler_always_succeeds() {
assert_eq!(200, 200);
}
}