migration/
m20240226_000009_peers_create_peer_store.rs1use sea_orm_migration::prelude::*;
2use sea_orm_migration::sea_orm::prelude::ChronoDateTimeUtc;
3
4pub(crate) fn peers_table() -> TableCreateStatement {
5 Table::create()
6 .table(NetworkPeer::Table)
7 .if_not_exists()
8 .col(
9 ColumnDef::new(NetworkPeer::Id)
10 .integer()
11 .not_null()
12 .auto_increment()
13 .primary_key(),
14 )
15 .col(
16 ColumnDef::new(NetworkPeer::PacketKey)
17 .binary_len(32)
18 .not_null()
19 .unique_key(),
20 )
21 .col(ColumnDef::new(NetworkPeer::MultiAddresses).json().not_null())
22 .col(ColumnDef::new(NetworkPeer::Origin).tiny_integer().not_null())
23 .col(ColumnDef::new(NetworkPeer::Version).string_len(50))
24 .col(
25 ColumnDef::new(NetworkPeer::LastSeen)
26 .timestamp()
27 .not_null()
28 .default(ChronoDateTimeUtc::UNIX_EPOCH),
29 )
30 .col(
31 ColumnDef::new(NetworkPeer::LastSeenLatency)
32 .integer()
33 .unsigned()
34 .not_null()
35 .default(0),
36 )
37 .col(ColumnDef::new(NetworkPeer::Ignored).timestamp().null())
38 .col(ColumnDef::new(NetworkPeer::Public).boolean().not_null().default(true))
39 .col(ColumnDef::new(NetworkPeer::Quality).float().not_null().default(0.0))
40 .col(ColumnDef::new(NetworkPeer::QualitySma).binary().null())
41 .col(ColumnDef::new(NetworkPeer::Backoff).float().null())
42 .col(
43 ColumnDef::new(NetworkPeer::HeartbeatsSent)
44 .integer()
45 .unsigned()
46 .default(0),
47 )
48 .col(
49 ColumnDef::new(NetworkPeer::HeartbeatsSuccessful)
50 .integer()
51 .unsigned()
52 .default(0),
53 )
54 .to_owned()
55}
56
57#[derive(DeriveMigrationName)]
58pub struct Migration;
59
60#[async_trait::async_trait]
61impl MigrationTrait for Migration {
62 async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
63 manager.create_table(peers_table()).await
64 }
65
66 async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
67 manager
68 .drop_table(Table::drop().table(NetworkPeer::Table).to_owned())
69 .await
70 }
71}
72
73#[derive(DeriveIden)]
74pub(crate) enum NetworkPeer {
75 Table,
76 Id,
77 PacketKey,
78 MultiAddresses,
79 Origin,
80 Version,
81 LastSeen,
82 LastSeenLatency,
83 Ignored,
84 Public,
85 Quality,
86 QualitySma,
87 Backoff,
88 HeartbeatsSent,
89 HeartbeatsSuccessful,
90}