Skip to content
Snippets Groups Projects
Commit 761c084d authored by Éloïs's avatar Éloïs Committed by jm
Browse files

[feat] gva: add query current_ud

parent a680805e
No related branches found
No related tags found
1 merge request!237Gva: add query current_ud
......@@ -15,6 +15,7 @@ type Query {
step: Int = 1,
sortOrder: SortOrder = ASC
): BlocksPage! @juniper(ownership: "owned")
currentUd: CurrentUd @juniper(ownership: "owned")
}
type Mutation {
......@@ -93,3 +94,16 @@ type Block {
#################################
scalar DateTimeUtc @juniper(with_time_zone: false)
#################################
# CurrentUd types
#################################
type CurrentUd {
amount: Int!
base: Int!
blockNumber: Int!
commonTime: DateTimeUtc!
membersCount: Int!
monetaryMass: Int!
}
\ No newline at end of file
......@@ -21,6 +21,7 @@ mod queries;
use self::entities::block::Block;
use self::entities::blocks_page::BlocksPage;
use self::entities::current_ud::CurrentUd;
use self::entities::node::{Node, Summary};
use crate::context::QueryContext;
#[cfg(not(test))]
......@@ -118,6 +119,21 @@ impl QueryFields for Query {
}
}
}
#[inline]
fn field_current_ud(
&self,
executor: &Executor<'_, QueryContext>,
trail: &QueryTrail<'_, CurrentUd, Walked>,
) -> FieldResult<Option<CurrentUd>> {
let db = executor.context().get_db();
cfg_if::cfg_if! {
if #[cfg(not(test))] {
db.read(|r| queries::current_ud::execute(&BcDbRoWithReader { db, r }, trail)).map_err(Into::into)
} else {
queries::current_ud::execute(db, trail).map_err(Into::into)
}
}
}
}
pub struct Mutation;
......
......@@ -17,4 +17,5 @@
pub mod block;
pub mod blocks_page;
pub mod current_ud;
pub mod node;
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// ! Module define graphql BlockCurrent UD type
use crate::context::QueryContext;
use chrono::NaiveDateTime;
use durs_bc_db_reader::current_metadata::current_ud::CurrentUdDb;
use juniper::{Executor, FieldResult};
pub struct CurrentUd {
pub amount: i32,
pub base: i32,
pub block_number: i32,
pub common_time: NaiveDateTime,
pub members_count: i32,
pub monetary_mass: i32,
}
impl CurrentUd {
// Convert BloCurrentUdDb (db entity) into CurrentUd (gva entity)
pub(crate) fn from_current_du_db(current_du_db: CurrentUdDb) -> CurrentUd {
CurrentUd {
amount: current_du_db.amount as i32,
base: current_du_db.base as i32,
block_number: current_du_db.block_number.0 as i32,
common_time: NaiveDateTime::from_timestamp(current_du_db.common_time as i64, 0),
members_count: current_du_db.members_count as i32,
monetary_mass: current_du_db.monetary_mass as i32,
}
}
}
impl super::super::CurrentUdFields for CurrentUd {
#[inline]
fn field_amount(&self, _executor: &Executor<'_, QueryContext>) -> FieldResult<&i32> {
Ok(&self.amount)
}
#[inline]
fn field_base(&self, _executor: &Executor<'_, QueryContext>) -> FieldResult<&i32> {
Ok(&self.base)
}
#[inline]
fn field_block_number(&self, _executor: &Executor<'_, QueryContext>) -> FieldResult<&i32> {
Ok(&self.block_number)
}
#[inline]
fn field_common_time(
&self,
_executor: &Executor<'_, QueryContext>,
) -> FieldResult<&NaiveDateTime> {
Ok(&self.common_time)
}
#[inline]
fn field_members_count(&self, _executor: &Executor<'_, QueryContext>) -> FieldResult<&i32> {
Ok(&self.members_count)
}
#[inline]
fn field_monetary_mass(&self, _executor: &Executor<'_, QueryContext>) -> FieldResult<&i32> {
Ok(&self.monetary_mass)
}
}
......@@ -18,6 +18,7 @@
pub mod block;
pub mod blocks;
pub mod current;
pub mod current_ud;
pub mod node;
#[cfg(test)]
......
// Copyright (C) 2017-2019 The AXIOM TEAM Association.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// ! Module execute GraphQl schema currentUd query
use crate::schema::entities::current_ud::CurrentUd;
use durs_bc_db_reader::{BcDbInReadTx, DbError};
use juniper_from_schema::{QueryTrail, Walked};
pub(crate) fn execute<DB: BcDbInReadTx>(
db: &DB,
_trail: &QueryTrail<'_, CurrentUd, Walked>,
) -> Result<Option<CurrentUd>, DbError> {
Ok(db
.get_current_ud()?
.map(|current_ud_db| CurrentUd::from_current_du_db(current_ud_db)))
}
#[cfg(test)]
mod tests {
use crate::db::BcDbRo;
use crate::schema::queries::tests;
use dubp_common_doc::BlockNumber;
use durs_bc_db_reader::current_metadata::current_ud::CurrentUdDb;
use serde_json::json;
static mut DB_TEST_CURRENT_UD_1: Option<BcDbRo> = None;
#[test]
fn test_graphql_current_ud() {
let mut mock_db = BcDbRo::new();
// Define mock db expectations here
mock_db.expect_get_current_ud().times(1).returning(|| {
Ok(Some(CurrentUdDb {
amount: 1_000,
base: 0,
block_number: BlockNumber(1),
common_time: 1_488_987_127,
members_count: 59,
monetary_mass: 59_000,
}))
});
let schema = tests::setup(mock_db, unsafe { &mut DB_TEST_CURRENT_UD_1 });
tests::test_gql_query(
schema,
"{ currentUd { amount, base, blockNumber, commonTime, membersCount, monetaryMass } }",
json!({
"data": {
"currentUd": {
"amount": 1_000,
"base": 0,
"blockNumber": 1,
"commonTime": 1_488_987_127.0,
"membersCount": 59,
"monetaryMass": 59000
}
}
}),
)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment