Fix errors

This commit is contained in:
fluo10 2025-08-13 08:17:41 +09:00
parent f7e67759de
commit 69e047cf5a
11 changed files with 48 additions and 33 deletions

View file

@ -8,7 +8,7 @@ use sea_orm::{entity::{
}, sea_query};
use serde::{Deserialize, Serialize};
use crate::{cache, data::value::{MultiaddrValue, PeerIdValue}, rpc::proto::CachedAddressMessage, utils::utc_to_timestamp};
use crate::{cache, data::value::{MultiaddrValue, PeerIdValue}, utils::utc_to_timestamp};
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize)]
@ -57,13 +57,3 @@ impl ActiveModel {
}
}
impl From<Model> for CachedAddressMessage {
fn from(a: Model) -> Self {
Self {
number: a.id,
created_at: Some(utc_to_timestamp(a.created_at)),
updated_at: Some(utc_to_timestamp(a.updated_at)),
multiaddress: Multiaddr::from(a.multiaddress).to_string(),
}
}
}

View file

@ -6,6 +6,7 @@ pub mod global;
pub mod message;
pub mod migration;
pub mod p2p;
pub mod proto;
pub mod rpc;
#[cfg(any(test, feature="test"))]
pub mod tests;

View file

@ -70,7 +70,7 @@ impl From<ping::Event> for Event {
async fn try_get_or_insert_cached_peer(peer_id: &PeerId, peer_addr: &Multiaddr) -> Result<(CachedPeerModel, CachedAddressModel), Error> {
match (
CachedPeerEntity::find().filter(CachedPeerColumn::PeerId.eq(PeerIdValue::from(peer_id.clone()))).one(CACHE_DATABASE_CONNECTION.get()).await?,
CachedAddressEntity::find().filter(CachedAddressColumn::Address.eq(MultiaddrValue::from(peer_addr.clone()))).one(CACHE_DATABASE_CONNECTION.get()).await?,
CachedAddressEntity::find().filter(CachedAddressColumn::Multiaddress.eq(MultiaddrValue::from(peer_addr.clone()))).one(CACHE_DATABASE_CONNECTION.get()).await?,
) {
(Some(x), Some(y) ) => {
if x.id == y.cached_peer_id {

View file

@ -0,0 +1,16 @@
use libp2p::Multiaddr;
use crate::cache::entity::CachedAddressModel;
use crate::utils::utc_to_timestamp;
use crate::proto::CachedAddressMessage;
impl From<&CachedAddressModel> for CachedAddressMessage {
fn from(a: &CachedAddressModel) -> Self {
Self {
number: a.id,
created_at: Some(utc_to_timestamp(a.created_at)),
updated_at: Some(utc_to_timestamp(a.updated_at)),
multiaddress: Multiaddr::from(a.multiaddress.clone()).to_string(),
}
}
}

View file

@ -0,0 +1,14 @@
use crate::{cache::entity::{CachedAddressModel, CachedPeerModel}, proto::{CachedAddressMessage, CachedPeerMessage}, utils::utc_to_timestamp};
impl From<(&CachedPeerModel, &Vec<CachedAddressModel>)> for CachedPeerMessage {
fn from(source: (&CachedPeerModel, &Vec<CachedAddressModel>)) -> Self {
let (peer, addresses) = source;
Self {
number: peer.id,
peer_id: peer.peer_id.to_string(),
created_at: Some(utc_to_timestamp(peer.created_at)),
addresses: addresses.iter().map(|x| CachedAddressMessage::from(x)).collect(),
}
}
}

5
core/src/proto/mod.rs Normal file
View file

@ -0,0 +1,5 @@
mod cached_address;
mod cached_peer;
tonic::include_proto!("caretta");

View file

@ -1,2 +1 @@
pub mod proto;
pub mod server;

View file

@ -1,9 +0,0 @@
use crate::{cache::entity::CachedPeerModel, error::Error};
tonic::include_proto!("caretta");
pub trait CachedPeerInterface {
async fn list( req: CachedPeerListRequest) -> Result<CachedPeerListResponse, Error>;
}

View file

@ -1,7 +1,8 @@
use crate::{cache::entity::{CachedAddressEntity, CachedPeerEntity, CachedPeerModel}, global::{CACHE_DATABASE_CONNECTION, DATA_DATABASE_CONNECTION}, rpc::proto::CachedAddressMessage};
use crate::{cache::entity::{CachedAddressEntity, CachedPeerEntity, CachedPeerModel}, global::{CACHE_DATABASE_CONNECTION, DATA_DATABASE_CONNECTION}, proto::CachedAddressMessage};
use futures::future::join_all;
use tonic::{Request, Response, Status};
use crate::rpc::proto::{cached_peer_service_server::{CachedPeerService, CachedPeerServiceServer}, CachedPeerListRequest, CachedPeerListResponse, CachedPeerMessage};
use crate::proto::{cached_peer_service_server::{CachedPeerService, CachedPeerServiceServer}, CachedPeerListRequest, CachedPeerListResponse, CachedPeerMessage};
use sea_orm::prelude::*;
#[derive(Debug, Default)]
@ -13,16 +14,15 @@ pub struct CachedPeerServer {}
impl CachedPeerService for CachedPeerServer {
async fn list(&self, request: Request<CachedPeerListRequest>) -> Result<Response<CachedPeerListResponse>, Status> {
println!("Got a request: {:?}", request);
todo!();
let reply = CachedPeerListResponse {
peers: CachedPeerEntity::find().all(CACHE_DATABASE_CONNECTION.get()).await.or_else(|e| Err(Status::from_error(Box::new(e))))?.into_iter().map(|x| {
let addresses = CachedAddressEntity::find().all(CACHE_DATABASE_CONNECTION.get()).await.or_else(|e| Err(Status::from_error(Box::new(e))))?
.map(|x| {
CachedAddressMessage::from(x)
});
CachedPeerMessage::from(x)
}).collect(),
peers: join_all( CachedPeerEntity::find().all(CACHE_DATABASE_CONNECTION.get()).await.or_else(|e| Err(Status::from_error(Box::new(e))))?.iter().map(|x| async move {
let addresses = CachedAddressEntity::find()
.all(CACHE_DATABASE_CONNECTION.get())
.await
.or_else(|e| Err(Status::from_error(Box::new(e))))?;
Ok::<CachedPeerMessage, Status>(CachedPeerMessage::from((x, &addresses)))
})).await.into_iter().collect::<Result<Vec<_>,_>>()?,
};
Ok(Response::new(reply))

View file

@ -1,7 +1,6 @@
pub mod cli;
pub mod config;
pub mod global;
pub mod rpc;
pub mod utils;
pub use caretta_core::{
cache,