From 90c08e453d8ee35c9f12fb4418a24df593709b50 Mon Sep 17 00:00:00 2001 From: "kody.low" Date: Sun, 26 May 2024 17:14:42 -0700 Subject: [PATCH] feat: get_balance --- fedimint-nwc/src/database/db.rs | 4 ++-- fedimint-nwc/src/nwc.rs | 39 +++++++++++++++++---------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/fedimint-nwc/src/database/db.rs b/fedimint-nwc/src/database/db.rs index be32f4e..0d3c98c 100644 --- a/fedimint-nwc/src/database/db.rs +++ b/fedimint-nwc/src/database/db.rs @@ -16,8 +16,8 @@ use super::payment::{Payment, PAYMENTS_TABLE}; #[derive(Debug, Clone)] pub struct Database { db: Arc, - max_amount: u64, - daily_limit: u64, + pub max_amount: u64, + pub daily_limit: u64, _rate_limit: Duration, } diff --git a/fedimint-nwc/src/nwc.rs b/fedimint-nwc/src/nwc.rs index c88ac60..14a2128 100644 --- a/fedimint-nwc/src/nwc.rs +++ b/fedimint-nwc/src/nwc.rs @@ -4,9 +4,10 @@ use anyhow::{anyhow, Result}; use lightning_invoice::{Bolt11Invoice, Bolt11InvoiceDescription}; use nostr::nips::nip04; use nostr::nips::nip47::{ - ErrorCode, LookupInvoiceRequestParams, LookupInvoiceResponseResult, MakeInvoiceRequestParams, - MakeInvoiceResponseResult, Method, NIP47Error, PayInvoiceRequestParams, - PayKeysendRequestParams, Request, RequestParams, Response, ResponseResult, + ErrorCode, GetBalanceResponseResult, LookupInvoiceRequestParams, LookupInvoiceResponseResult, + MakeInvoiceRequestParams, MakeInvoiceResponseResult, Method, NIP47Error, + PayInvoiceRequestParams, PayKeysendRequestParams, Request, RequestParams, Response, + ResponseResult, }; use nostr::util::hex; use nostr::Tag; @@ -108,10 +109,7 @@ async fn handle_nwc_params( RequestParams::PayKeysend(params) => handle_pay_keysend(params, method, db).await, RequestParams::MakeInvoice(params) => handle_make_invoice(params, multimint, db).await, RequestParams::LookupInvoice(params) => handle_lookup_invoice(params, method, db).await, - RequestParams::GetBalance => Err(NIP47Error { - code: ErrorCode::Unauthorized, - message: "GetBalance functionality is not implemented yet.".to_string(), - }), + RequestParams::GetBalance => handle_get_balance(method, db).await, RequestParams::GetInfo => Err(NIP47Error { code: ErrorCode::Unauthorized, message: "GetInfo functionality is not implemented yet.".to_string(), @@ -270,18 +268,21 @@ async fn handle_lookup_invoice( }) } -// async fn handle_get_balance(method: Method, db: &Database) -> Response { -// let tracker = tracker.lock().await.sum_payments(); -// let remaining_msats = config.daily_limit * 1_000 - tracker; -// info!("Current balance: {remaining_msats}msats"); -// Response { -// result_type: Method::GetBalance, -// error: None, -// result: Some(ResponseResult::GetBalance(GetBalanceResponseResult { -// balance: remaining_msats, -// })), -// } -// } +async fn handle_get_balance(method: Method, db: &Database) -> Result { + let tracker = db.sum_payments().map_err(|e| NIP47Error { + code: ErrorCode::Unauthorized, + message: format!("Failed to get balance: {e}"), + })?; + let remaining_msats = db.daily_limit * 1_000 - tracker; + info!("Current balance: {remaining_msats}msats"); + Ok(Response { + result_type: method, + error: None, + result: Some(ResponseResult::GetBalance(GetBalanceResponseResult { + balance: remaining_msats, + })), + }) +} // async fn handle_get_info(method: Method, nostr: &NostrService) -> Response { // let lnd_info: GetInfoResponse = lnd.get_info(GetInfoRequest