From 7fe98256d2775eecaaedf03401f1a0ff9b08a49b Mon Sep 17 00:00:00 2001 From: librelois Date: Sun, 9 May 2021 13:26:22 +0200 Subject: [PATCH] feat(txsHistory): add field receivedTime --- Cargo.lock | 18 +++--- dbs-reader/src/lib.rs | 6 +- dbs-reader/src/txs_history.rs | 14 ++--- gql/src/entities.rs | 4 +- gql/src/entities/block_gva.rs | 4 +- gql/src/entities/tx_gva.rs | 62 ++++++++++++++++++-- gql/src/lib.rs | 2 +- gql/src/mutations.rs | 8 +-- gql/src/queries/txs_history.rs | 10 ++-- gql/src/subscriptions/receive_pending_txs.rs | 4 +- src/lib.rs | 2 +- 11 files changed, 93 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2a94acf..064de6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,7 +757,7 @@ dependencies = [ [[package]] name = "duniter-bc-reader" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "anyhow", "dubp", @@ -803,7 +803,7 @@ dependencies = [ [[package]] name = "duniter-conf" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "anyhow", "dubp", @@ -817,7 +817,7 @@ dependencies = [ [[package]] name = "duniter-core" version = "1.8.1" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "duniter-bc-reader", "duniter-conf", @@ -830,7 +830,7 @@ dependencies = [ [[package]] name = "duniter-dbs" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "arrayvec", "bincode", @@ -853,7 +853,7 @@ dependencies = [ [[package]] name = "duniter-dbs-write-ops" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "chrono", "dubp", @@ -868,7 +868,7 @@ dependencies = [ [[package]] name = "duniter-global" version = "1.8.1" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "async-rwlock", "dubp", @@ -999,7 +999,7 @@ dependencies = [ [[package]] name = "duniter-mempools" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "dubp", "duniter-bc-reader", @@ -1012,7 +1012,7 @@ dependencies = [ [[package]] name = "duniter-module" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "anyhow", "async-mutex", @@ -1558,7 +1558,7 @@ dependencies = [ [[package]] name = "kv_typed" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600" dependencies = [ "byteorder", "cfg-if 0.1.10", diff --git a/dbs-reader/src/lib.rs b/dbs-reader/src/lib.rs index 738795f..d3ac218 100644 --- a/dbs-reader/src/lib.rs +++ b/dbs-reader/src/lib.rs @@ -49,7 +49,7 @@ use duniter_core::dbs::{ cm_v1::CmV1DbReadable, txs_mp_v2::TxsMpV2DbReadable, }, - BlockMetaV2, + BlockMetaV2, PendingTxDbV2, }; use duniter_core::dbs::{ kv_typed::prelude::*, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, UtxoIdDbV2, @@ -149,7 +149,7 @@ pub trait DbsReader { &self, txs_mp_db_ro: &TxsMpDb, pubkey: PublicKey, - ) -> KvResult<(Vec, Vec)>; + ) -> KvResult<(Vec, Vec)>; fn idty( &self, bc_db: &BcV2DbRo, @@ -302,7 +302,7 @@ impl DbsReader for DbsReaderImpl { &self, txs_mp_db_ro: &TxsMpDb, pubkey: PublicKey, - ) -> KvResult<(Vec, Vec)> { + ) -> KvResult<(Vec, Vec)> { self.get_txs_history_mempool_(txs_mp_db_ro, pubkey) } diff --git a/dbs-reader/src/txs_history.rs b/dbs-reader/src/txs_history.rs index 8182961..795a599 100644 --- a/dbs-reader/src/txs_history.rs +++ b/dbs-reader/src/txs_history.rs @@ -341,14 +341,14 @@ impl DbsReaderImpl { &self, txs_mp_db_ro: &TxsMpDb, pubkey: PublicKey, - ) -> KvResult<(Vec, Vec)> { + ) -> KvResult<(Vec, Vec)> { let sending = txs_mp_db_ro .txs_by_issuer() .get_ref_slice(&PubKeyKeyV2(pubkey), |hashs| { let mut sent = Vec::with_capacity(hashs.len()); for hash in hashs { if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? { - sent.push(tx_db.0); + sent.push(tx_db); } } Ok(sent) @@ -360,7 +360,7 @@ impl DbsReaderImpl { let mut pending = Vec::with_capacity(hashs.len()); for hash in hashs { if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? { - pending.push(tx_db.0); + pending.push(tx_db); } } Ok(pending) @@ -437,8 +437,8 @@ fn txs_history_bc_collect>>( pub struct TxsHistory { pub sent: Vec, pub received: Vec, - pub sending: Vec, - pub pending: Vec, + pub sending: Vec<(TransactionDocumentV10, i64)>, + pub pending: Vec<(TransactionDocumentV10, i64)>, } // Needed for BMA only @@ -484,7 +484,7 @@ pub fn get_transactions_history_for_bma, + pub(crate) sending: Vec, /// Transactions receiving - pub(crate) receiving: Vec, + pub(crate) receiving: Vec, } #[derive(Clone, async_graphql::SimpleObject)] diff --git a/gql/src/entities/block_gva.rs b/gql/src/entities/block_gva.rs index c12b8c2..58d4f74 100644 --- a/gql/src/entities/block_gva.rs +++ b/gql/src/entities/block_gva.rs @@ -13,7 +13,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -use super::tx_gva::TxGva; +use super::tx_gva::WrittenTxGva; use crate::*; use dubp::block::DubpBlockV10; use duniter_core::dbs::BlockMetaV2; @@ -103,7 +103,7 @@ pub(crate) struct Block { pub excluded: Vec, /// Certifications pub certifications: Vec, - pub transactions: Vec, + pub transactions: Vec, } impl From<&DubpBlockV10> for Block { diff --git a/gql/src/entities/tx_gva.rs b/gql/src/entities/tx_gva.rs index 6fd3764..af16297 100644 --- a/gql/src/entities/tx_gva.rs +++ b/gql/src/entities/tx_gva.rs @@ -15,10 +15,62 @@ use crate::*; use dubp::documents::transaction::TransactionDocumentV10Stringified; +use duniter_core::dbs::PendingTxDbV2; use duniter_gva_db::GvaTxDbV1; #[derive(async_graphql::SimpleObject)] -pub(crate) struct TxGva { +#[graphql(name = "PendingTx")] +pub(crate) struct PendingTxGva { + /// Version. + pub version: i32, + /// Currency. + pub currency: String, + /// Blockstamp + pub blockstamp: String, + /// Locktime + pub locktime: u64, + /// Document issuers. + pub issuers: Vec, + /// Transaction inputs. + pub inputs: Vec, + /// Inputs unlocks. + pub unlocks: Vec, + /// Transaction outputs. + pub outputs: Vec, + /// Transaction comment + pub comment: String, + /// Document signatures + pub signatures: Vec, + /// Transaction hash + pub hash: String, + /// Received time + pub received_time: i64, +} + +impl From<&PendingTxDbV2> for PendingTxGva { + fn from(db_tx: &PendingTxDbV2) -> Self { + let tx_stringified = db_tx.doc.to_string_object(); + + PendingTxGva { + version: 10, + currency: tx_stringified.currency, + blockstamp: tx_stringified.blockstamp, + locktime: tx_stringified.locktime, + issuers: tx_stringified.issuers, + inputs: tx_stringified.inputs, + unlocks: tx_stringified.unlocks, + outputs: tx_stringified.outputs, + comment: tx_stringified.comment, + signatures: tx_stringified.signatures, + hash: tx_stringified.hash.unwrap_or_default(), + received_time: db_tx.received_time, + } + } +} + +#[derive(async_graphql::SimpleObject)] +#[graphql(name = "WrittenTx")] +pub(crate) struct WrittenTxGva { /// Version. pub version: i32, /// Currency. @@ -47,23 +99,23 @@ pub(crate) struct TxGva { pub written_time: Option, } -impl From for TxGva { +impl From for WrittenTxGva { fn from(db_tx: GvaTxDbV1) -> Self { - let mut self_: TxGva = (&db_tx.tx).into(); + let mut self_: WrittenTxGva = (&db_tx.tx).into(); self_.written_block = Some(db_tx.written_block.to_string()); self_.written_time = Some(db_tx.written_time); self_ } } -impl From<&TransactionDocumentV10> for TxGva { +impl From<&TransactionDocumentV10> for WrittenTxGva { fn from(tx: &TransactionDocumentV10) -> Self { let tx_stringified = tx.to_string_object(); Self::from(tx_stringified) } } -impl From for TxGva { +impl From for WrittenTxGva { fn from(tx_stringified: TransactionDocumentV10Stringified) -> Self { Self { version: 10, diff --git a/gql/src/lib.rs b/gql/src/lib.rs index 64a48b5..32972a5 100644 --- a/gql/src/lib.rs +++ b/gql/src/lib.rs @@ -38,7 +38,7 @@ use crate::entities::{ block_gva::{Block, BlockMeta}, idty_gva::Identity, network::{HeadGva, PeerCardGva, PeerWithHeads}, - tx_gva::TxGva, + tx_gva::{PendingTxGva, WrittenTxGva}, ud_gva::{CurrentUdGva, RevalUdGva, UdGva}, utxos_gva::UtxosGva, AggregateSum, AmountWithBase, EdgeTx, RawTxOrChanges, Sum, TxDirection, TxsHistoryMempool, diff --git a/gql/src/mutations.rs b/gql/src/mutations.rs index 3d258e9..3ecfdd8 100644 --- a/gql/src/mutations.rs +++ b/gql/src/mutations.rs @@ -26,7 +26,7 @@ impl MutationRoot { &self, ctx: &async_graphql::Context<'_>, raw_tx: String, - ) -> async_graphql::Result { + ) -> async_graphql::Result { let tx = TransactionDocumentV10::parse_from_raw_text(&raw_tx)?; let data = ctx.data::()?; @@ -46,7 +46,7 @@ impl MutationRoot { }) .await??; - Ok(TxGva::from(&tx)) + Ok(WrittenTxGva::from(&tx)) } /// Process several transactions @@ -55,7 +55,7 @@ impl MutationRoot { &self, ctx: &async_graphql::Context<'_>, raw_txs: Vec, - ) -> async_graphql::Result> { + ) -> async_graphql::Result> { let txs = raw_txs .iter() .map(|raw_tx| TransactionDocumentV10::parse_from_raw_text(&raw_tx)) @@ -78,7 +78,7 @@ impl MutationRoot { .map(|()| tx) }) .await??; - processed_txs.push(TxGva::from(&tx)); + processed_txs.push(WrittenTxGva::from(&tx)); } Ok(processed_txs) diff --git a/gql/src/queries/txs_history.rs b/gql/src/queries/txs_history.rs index 3cf5bfe..3d28421 100644 --- a/gql/src/queries/txs_history.rs +++ b/gql/src/queries/txs_history.rs @@ -55,7 +55,7 @@ impl TxsHistoryBlockchainQueryInner { async fn both( &self, ctx: &async_graphql::Context<'_>, - ) -> async_graphql::Result> { + ) -> async_graphql::Result> { let start_time = std::time::Instant::now(); let data = ctx.data::()?; @@ -146,7 +146,7 @@ impl TxsHistoryBlockchainQueryInner { async fn received( &self, ctx: &async_graphql::Context<'_>, - ) -> async_graphql::Result> { + ) -> async_graphql::Result> { let data = ctx.data::()?; let db_reader = data.dbs_reader(); let pagination = self.pagination; @@ -181,7 +181,7 @@ impl TxsHistoryBlockchainQueryInner { async fn sent( &self, ctx: &async_graphql::Context<'_>, - ) -> async_graphql::Result> { + ) -> async_graphql::Result> { let data = ctx.data::()?; let db_reader = data.dbs_reader(); let pagination = self.pagination; @@ -236,11 +236,11 @@ impl TxsHistoryMempoolQuery { Ok(TxsHistoryMempool { sending: sending .into_iter() - .map(|db_tx| TxGva::from(&db_tx)) + .map(|db_tx| PendingTxGva::from(&db_tx)) .collect(), receiving: pending .into_iter() - .map(|db_tx| TxGva::from(&db_tx)) + .map(|db_tx| PendingTxGva::from(&db_tx)) .collect(), }) } diff --git a/gql/src/subscriptions/receive_pending_txs.rs b/gql/src/subscriptions/receive_pending_txs.rs index d223f7c..d2fc078 100644 --- a/gql/src/subscriptions/receive_pending_txs.rs +++ b/gql/src/subscriptions/receive_pending_txs.rs @@ -25,7 +25,7 @@ impl PendingTxsSubscription { async fn receive_pending_txs( &self, ctx: &async_graphql::Context<'_>, - ) -> impl Stream>> { + ) -> impl Stream>> { create_subscription( ctx, |dbs| dbs.txs_mp_db.txs(), @@ -37,7 +37,7 @@ impl PendingTxsSubscription { .. } = event { - txs.push(TxGva::from(&pending_tx.0)); + txs.push(WrittenTxGva::from(&pending_tx.doc)); } } if txs.is_empty() { diff --git a/src/lib.rs b/src/lib.rs index 6098427..90b5109 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -206,7 +206,7 @@ impl duniter_core::module::DuniterModule for GvaModule { .txs() .get(&duniter_core::dbs::HashKeyV2(hash))? { - Ok(Some((tx.0, None))) + Ok(Some((tx.doc, None))) } else if let Some(tx_db) = gva_db.txs().get(&duniter_core::dbs::HashKeyV2(hash))? { Ok(Some((tx_db.tx, Some(tx_db.written_block.number)))) } else {