Skip to main content
Sign in
Snippets Groups Projects
Commit 5ede2435 authored by Éloïs's avatar Éloïs
Browse files

Merge branch 'gva-pubkey_username' into 'dev'

[feat] gva: idty.username

See merge request !1351
parents 24ed0aad 0feb0612
No related branches found
No related tags found
1 merge request!1351[feat] gva: idty.username
...@@ -16,45 +16,57 @@ ...@@ -16,45 +16,57 @@
use crate::*; use crate::*;
impl DbsReader { impl DbsReader {
pub fn pubkey_is_member(&self, pubkey: PublicKey) -> KvResult<Option<bool>> { pub fn idty(
Ok(self &self,
.0 bc_db: &BcV2DbRo<FileBackend>,
.gva_identities() pubkey: PublicKey,
.get(&PubKeyKeyV2(pubkey))? ) -> KvResult<Option<duniter_dbs::IdtyDbV2>> {
.map(|identity| identity.is_member)) bc_db.identities().get(
&duniter_dbs::PubKeyKeyV2::from_bytes(pubkey.as_ref())
.map_err(|e| KvError::DeserError(Box::new(e)))?,
)
} }
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use duniter_dbs::databases::bc_v2::BcV2DbWritable;
use duniter_gva_db::GvaV1DbWritable; use duniter_gva_db::GvaV1DbWritable;
#[test] #[test]
fn test_pubkey_is_member() -> KvResult<()> { fn test_idty() -> KvResult<()> {
let bc_db = duniter_dbs::databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?;
let gva_db = duniter_gva_db::GvaV1Db::<Mem>::open(MemConf::default())?; let gva_db = duniter_gva_db::GvaV1Db::<Mem>::open(MemConf::default())?;
let bc_db_ro = bc_db.get_ro_handler();
let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) }); let db_reader = create_dbs_reader(unsafe { std::mem::transmute(&gva_db.get_ro_handler()) });
let pk = PublicKey::default(); let pk = PublicKey::default();
// Write test data bc_db
gva_db .identities_write()
.gva_identities_write() .upsert(PubKeyKeyV2(pk), duniter_dbs::IdtyDbV2::default())?;
.upsert(PubKeyKeyV2(pk), GvaIdtyDbV1::default())?;
// Test assert_eq!(
db_reader.idty(&bc_db_ro, pk)?,
Some(duniter_dbs::IdtyDbV2::default())
);
assert_eq!(db_reader.pubkey_is_member(pk)?, Some(false)); bc_db.identities_write().upsert(
gva_db.gva_identities_write().upsert(
PubKeyKeyV2(pk), PubKeyKeyV2(pk),
GvaIdtyDbV1 { duniter_dbs::IdtyDbV2 {
is_member: true, is_member: true,
..Default::default() username: String::from("JohnDoe"),
}, },
)?; )?;
assert_eq!(db_reader.pubkey_is_member(pk)?, Some(true)); assert_eq!(
db_reader.idty(&bc_db_ro, pk)?,
Some(duniter_dbs::IdtyDbV2 {
is_member: true,
username: String::from("JohnDoe"),
})
);
Ok(()) Ok(())
} }
... ...
......
...@@ -16,4 +16,5 @@ ...@@ -16,4 +16,5 @@
#[derive(async_graphql::SimpleObject)] #[derive(async_graphql::SimpleObject)]
pub(crate) struct Identity { pub(crate) struct Identity {
pub is_member: bool, pub is_member: bool,
pub username: String,
} }
...@@ -79,7 +79,7 @@ mod tests { ...@@ -79,7 +79,7 @@ mod tests {
use dubp::{block::DubpBlockV10, documents::transaction::TransactionInputV10}; use dubp::{block::DubpBlockV10, documents::transaction::TransactionInputV10};
use duniter_dbs::{ use duniter_dbs::{
databases::{bc_v2::*, cm_v1::CmV1DbReadable}, databases::{bc_v2::*, cm_v1::CmV1DbReadable},
BlockMetaV2, SourceAmountValV2, BlockMetaV2, IdtyDbV2, SourceAmountValV2,
}; };
use duniter_gva_dbs_reader::pagination::*; use duniter_gva_dbs_reader::pagination::*;
use fast_threadpool::ThreadPoolConfig; use fast_threadpool::ThreadPoolConfig;
...@@ -148,7 +148,7 @@ mod tests { ...@@ -148,7 +148,7 @@ mod tests {
txs_mp_db_ro: &TxsMpDb, txs_mp_db_ro: &TxsMpDb,
pubkey: PublicKey, pubkey: PublicKey,
) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)>; ) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)>;
fn pubkey_is_member(&self, pubkey: PublicKey) -> KvResult<Option<bool>>; fn idty(&self, bc_db: &BcV2DbRo<FileBackend>, pubkey: PublicKey) -> KvResult<Option<IdtyDbV2>>;
fn unspent_uds_of_pubkey<BcDb: 'static + BcV2DbReadable>( fn unspent_uds_of_pubkey<BcDb: 'static + BcV2DbReadable>(
&self, &self,
bc_db: &BcDb, bc_db: &BcDb,
... ...
......
...@@ -30,13 +30,15 @@ impl IdtyQuery { ...@@ -30,13 +30,15 @@ impl IdtyQuery {
let data = ctx.data::<GvaSchemaData>()?; let data = ctx.data::<GvaSchemaData>()?;
let dbs_reader = data.dbs_reader(); let dbs_reader = data.dbs_reader();
let pubkey_is_member = data let idty = data
.dbs_pool .dbs_pool
.execute(move |_| dbs_reader.pubkey_is_member(pubkey)) .execute(move |dbs| dbs_reader.idty(&dbs.bc_db_ro, pubkey))
.await??; .await??
.unwrap_or_default();
Ok(Identity { Ok(Identity {
is_member: pubkey_is_member.unwrap_or_default(), is_member: idty.is_member,
username: idty.username,
}) })
} }
} }
...@@ -50,24 +52,30 @@ mod tests { ...@@ -50,24 +52,30 @@ mod tests {
async fn test_idty() -> anyhow::Result<()> { async fn test_idty() -> anyhow::Result<()> {
let mut dbs_reader = MockDbsReader::new(); let mut dbs_reader = MockDbsReader::new();
dbs_reader dbs_reader
.expect_pubkey_is_member() .expect_idty()
.withf(|s| { .withf(|_, s| {
s == &PublicKey::from_base58("DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP") s == &PublicKey::from_base58("DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP")
.expect("wrong pubkey") .expect("wrong pubkey")
}) })
.times(1) .times(1)
.returning(|_| Ok(Some(true))); .returning(|_, _| {
Ok(Some(duniter_dbs::IdtyDbV2 {
is_member: true,
username: String::from("JohnDoe"),
}))
});
let schema = create_schema(dbs_reader)?; let schema = create_schema(dbs_reader)?;
assert_eq!( assert_eq!(
exec_graphql_request( exec_graphql_request(
&schema, &schema,
r#"{ idty(pubkey: "DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP") {isMember} }"# r#"{ idty(pubkey: "DnjL6hYA1k7FavGHbbir79PKQbmzw63d6bsamBBdUULP") {isMember, username} }"#
) )
.await?, .await?,
serde_json::json!({ serde_json::json!({
"data": { "data": {
"idty": { "idty": {
"isMember": true "isMember": true,
"username": "JohnDoe"
} }
} }
}) })
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment