migration/
m20240226_000009_peers_create_peer_store.rs

1use 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}