caretta-sync/lazy-supplements-core/src/cache/entity/peer.rs

73 lines
2 KiB
Rust
Raw Normal View History

use std::str::FromStr;
use chrono::{Days, Local};
use libp2p::{multiaddr, Multiaddr, PeerId};
use sea_orm::{entity::{
prelude::*, *
}, sea_query};
2025-06-17 07:20:24 +09:00
use serde::{Deserialize, Serialize};
use crate::data::value::{MultiaddrValue, PeerIdValue};
2025-06-17 07:20:24 +09:00
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "peer")]
2025-06-17 07:20:24 +09:00
pub struct Model {
#[sea_orm(primary_key)]
pub id: u32,
#[sea_orm(indexed)]
pub created_at: DateTimeUtc,
#[sea_orm(indexed)]
pub updated_at: DateTimeUtc,
#[sea_orm(indexed)]
pub expires_at: DateTimeUtc,
#[sea_orm(indexed)]
pub peer_id: PeerIdValue,
#[sea_orm(indexed)]
pub address: MultiaddrValue,
2025-06-17 07:20:24 +09:00
}
2025-06-17 07:20:24 +09:00
#[derive(Copy, Clone, Debug, DeriveRelation, EnumIter)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}
impl ActiveModel {
pub fn new(peer_id: PeerId, multiaddr: Multiaddr) -> Self {
2025-06-17 07:20:24 +09:00
let timestamp: DateTimeUtc = Local::now().to_utc();
Self{
peer_id: Set(PeerIdValue::from(peer_id)),
address: Set(MultiaddrValue::from(multiaddr)),
2025-06-17 07:20:24 +09:00
created_at: Set(timestamp),
updated_at: Set(timestamp),
expires_at: Set(timestamp.checked_add_days(Days::new(30)).unwrap()),
2025-06-17 07:20:24 +09:00
..Default::default()
}
}
}
#[cfg(test)]
mod tests {
use std::net::Ipv4Addr;
use crate::{cache::entity::peer, global::get_or_init_test_cache_database};
2025-06-22 11:29:44 +09:00
2025-06-17 07:20:24 +09:00
use super::*;
use libp2p::{identity::{self, Keypair}, swarm::handler::multi};
2025-06-17 07:20:24 +09:00
#[tokio::test]
async fn insert() {
2025-06-22 11:29:44 +09:00
let db = get_or_init_test_cache_database().await;
let peer_id = Keypair::generate_ed25519().public().to_peer_id();
let multiaddr = Multiaddr::empty()
.with(Ipv4Addr::new(127,0,0,1).into())
.with(multiaddr::Protocol::Tcp(0));
let inserted: Model = ActiveModel::new(peer_id.clone(), multiaddr.clone())
.insert(db).await.unwrap();
assert_eq!(PeerId::from(inserted.peer_id), peer_id);
assert_eq!(Multiaddr::from(inserted.address), multiaddr);
2025-06-17 07:20:24 +09:00
}
}