Persistence: consolidate state filter (#400)

* Simplify sync_payments_with_chain_data loop

* Extract get_where_clause_state_in() util

* Bump flutter transitive dependency
This commit is contained in:
ok300
2024-07-18 07:48:48 +00:00
committed by GitHub
parent d567c27e67
commit 970489ccfa
6 changed files with 31 additions and 45 deletions

View File

@@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
use crate::ensure_sdk;
use crate::error::PaymentError;
use crate::model::*;
use crate::persist::Persister;
use crate::persist::{get_where_clause_state_in, Persister};
impl Persister {
pub(crate) fn insert_chain_swap(&self, chain_swap: &ChainSwap) -> Result<()> {
@@ -179,16 +179,7 @@ impl Persister {
con: &Connection,
states: Vec<PaymentState>,
) -> Result<Vec<ChainSwap>> {
let mut where_clause: Vec<String> = Vec::new();
where_clause.push(format!(
"state in ({})",
states
.iter()
.map(|t| format!("'{}'", *t as i8))
.collect::<Vec<_>>()
.join(", ")
));
let where_clause = vec![get_where_clause_state_in(&states)];
self.list_chain_swaps_where(con, where_clause)
}

View File

@@ -21,6 +21,18 @@ pub(crate) struct Persister {
network: LiquidNetwork,
}
/// Builds a WHERE clause that checks if `state` is any of the given arguments
fn get_where_clause_state_in(allowed_states: &[PaymentState]) -> String {
format!(
"state in ({})",
allowed_states
.iter()
.map(|t| format!("'{}'", *t as i8))
.collect::<Vec<_>>()
.join(", ")
)
}
impl Persister {
pub fn new(working_dir: &str, network: LiquidNetwork) -> Result<Self> {
let main_db_dir = PathBuf::from_str(working_dir)?;

View File

@@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
use crate::ensure_sdk;
use crate::error::PaymentError;
use crate::model::*;
use crate::persist::Persister;
use crate::persist::{get_where_clause_state_in, Persister};
impl Persister {
pub(crate) fn insert_receive_swap(&self, receive_swap: &ReceiveSwap) -> Result<()> {
@@ -129,15 +129,10 @@ impl Persister {
&self,
con: &Connection,
) -> rusqlite::Result<Vec<ReceiveSwap>> {
let mut where_clause: Vec<String> = Vec::new();
where_clause.push(format!(
"state in ({})",
[PaymentState::Created, PaymentState::Pending]
.iter()
.map(|t| format!("'{}'", *t as i8))
.collect::<Vec<_>>()
.join(", ")
));
let where_clause = vec![get_where_clause_state_in(&[
PaymentState::Created,
PaymentState::Pending,
])];
self.list_receive_swaps(con, where_clause)
}

View File

@@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
use crate::ensure_sdk;
use crate::error::PaymentError;
use crate::model::*;
use crate::persist::Persister;
use crate::persist::{get_where_clause_state_in, Persister};
impl Persister {
pub(crate) fn insert_send_swap(&self, send_swap: &SendSwap) -> Result<()> {
@@ -147,29 +147,19 @@ impl Persister {
&self,
con: &Connection,
) -> rusqlite::Result<Vec<SendSwap>> {
let mut where_clause: Vec<String> = Vec::new();
where_clause.push(format!(
"state in ({})",
[PaymentState::Created, PaymentState::Pending]
.iter()
.map(|t| format!("'{}'", *t as i8))
.collect::<Vec<_>>()
.join(", ")
));
let where_clause = vec![get_where_clause_state_in(&[
PaymentState::Created,
PaymentState::Pending,
])];
self.list_send_swaps(con, where_clause)
}
pub(crate) fn list_pending_send_swaps(&self) -> Result<Vec<SendSwap>> {
let mut where_clause: Vec<String> = Vec::new();
where_clause.push(format!(
"state in ({})",
[PaymentState::Pending, PaymentState::RefundPending]
.iter()
.map(|t| format!("'{}'", *t as i8))
.collect::<Vec<_>>()
.join(", ")
));
let where_clause = vec![get_where_clause_state_in(&[
PaymentState::Pending,
PaymentState::RefundPending,
])];
let con: Connection = self.get_connection()?;
let query = Self::list_send_swaps_query(where_clause);

View File

@@ -1355,9 +1355,7 @@ impl LiquidSdk {
/// it inserts or updates a corresponding entry in our Payments table.
async fn sync_payments_with_chain_data(&self, with_scan: bool) -> Result<()> {
let payments_before_sync: HashMap<String, Payment> = self
.list_payments(&ListPaymentsRequest {
..Default::default()
})
.list_payments(&ListPaymentsRequest::default())
.await?
.into_iter()
.filter_map(|payment| {

View File

@@ -426,10 +426,10 @@ packages:
dependency: transitive
description:
name: qr
sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3"
sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
qr_flutter:
dependency: "direct main"
description: