use actix_web::web::Data;
use actix_web::{HttpRequest, HttpResponse, post};
use serde_json::json;
use crate::AppState;
use crate::deferred_write::{FlushSummary, flush_pending};
#[post("/gateway/deferred/flush")]
pub async fn gateway_deferred_flush_route(
_req: HttpRequest,
app_state: Data<AppState>,
) -> HttpResponse {
let Some(ref buf) = app_state.write_buffer else {
return HttpResponse::Ok().json(json!({
"status": "success",
"message": "Deferred writes are not enabled",
"flushed": 0,
"failed": 0,
"total": 0,
}));
};
let summary: FlushSummary = flush_pending(
buf,
app_state.wal_manager.as_deref(),
&app_state.pg_registry,
&app_state.cache,
)
.await;
HttpResponse::Ok().json(json!({
"status": "success",
"total": summary.total,
"succeeded": summary.succeeded,
"failed": summary.failed,
"invalidated_tables": summary.invalidated_tables,
}))
}