49 lines
1.5 KiB
Rust
49 lines
1.5 KiB
Rust
use actix_web::{web, HttpResponse};
|
|
use std::sync::Arc;
|
|
use tokio::sync::Mutex;
|
|
|
|
use crate::db::Database;
|
|
|
|
pub async fn get_payments(
|
|
db: web::Data<Arc<Mutex<Database>>>,
|
|
path: web::Path<String>,
|
|
) -> HttpResponse {
|
|
let address = path.into_inner();
|
|
let db = db.lock().await;
|
|
|
|
// Get all processes with this address
|
|
match db.get_all_processes().await {
|
|
Ok(processes) => {
|
|
let matching_processes: Vec<_> = processes.iter()
|
|
.filter(|p| p.btc_address.as_ref() == Some(&address))
|
|
.collect();
|
|
|
|
if matching_processes.is_empty() {
|
|
return HttpResponse::NotFound().json(serde_json::json!({
|
|
"error": "No processes found with this address"
|
|
}));
|
|
}
|
|
|
|
let mut all_payments = vec![];
|
|
let mut total_received: i64 = 0;
|
|
|
|
// TODO: Add get_payments_for_address method to Database
|
|
// For now, return process info
|
|
|
|
for process in matching_processes {
|
|
total_received += process.total_paid_sats;
|
|
}
|
|
|
|
HttpResponse::Ok().json(serde_json::json!({
|
|
"address": address,
|
|
"total_received_sats": total_received,
|
|
"processes": matching_processes.len(),
|
|
"payments": all_payments
|
|
}))
|
|
},
|
|
Err(e) => HttpResponse::InternalServerError().json(serde_json::json!({
|
|
"error": format!("Failed to query database: {}", e)
|
|
}))
|
|
}
|
|
}
|