2025-06-24 22:06:25 +09:00
|
|
|
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};
|
|
|
|
|
2025-06-24 22:06:25 +09:00
|
|
|
use crate::data::value::{MultiaddrValue, PeerIdValue};
|
|
|
|
|
2025-06-17 07:20:24 +09:00
|
|
|
|
2025-06-24 22:06:25 +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)]
|
2025-06-24 22:06:25 +09:00
|
|
|
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-24 22:06:25 +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 {
|
2025-06-24 22:06:25 +09:00
|
|
|
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{
|
2025-06-24 22:06:25 +09:00
|
|
|
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),
|
2025-06-24 22:06:25 +09:00
|
|
|
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 {
|
2025-06-24 22:06:25 +09:00
|
|
|
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::*;
|
|
|
|
|
2025-06-24 22:06:25 +09:00
|
|
|
use libp2p::{identity::{self, Keypair}, swarm::handler::multi};
|
2025-06-17 07:20:24 +09:00
|
|
|
|
|
|
|
#[tokio::test]
|
2025-06-24 22:06:25 +09:00
|
|
|
async fn insert() {
|
2025-06-22 11:29:44 +09:00
|
|
|
let db = get_or_init_test_cache_database().await;
|
2025-06-24 22:06:25 +09:00
|
|
|
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
|
|
|
}
|
|
|
|
|
|
|
|
}
|