Skip to main content

migration/
m20251124_00003_tickets_create_ticket.rs

1use sea_orm_migration::prelude::*;
2
3#[derive(DeriveMigrationName)]
4pub struct Migration;
5
6#[async_trait::async_trait]
7impl MigrationTrait for Migration {
8    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
9        manager
10            .create_table(
11                Table::create()
12                    .table(Ticket::Table)
13                    .if_not_exists()
14                    .col(
15                        ColumnDef::new(Ticket::Id)
16                            .integer()
17                            .not_null()
18                            .auto_increment()
19                            .primary_key(),
20                    )
21                    .col(ColumnDef::new(Ticket::ChannelId).string_len(64).not_null())
22                    .col(ColumnDef::new(Ticket::Counterparty).string_len(40).not_null())
23                    .col(ColumnDef::new(Ticket::Amount).binary_len(12).not_null())
24                    .col(ColumnDef::new(Ticket::Index).binary_len(8).not_null())
25                    .col(ColumnDef::new(Ticket::WinningProbability).binary_len(7).not_null())
26                    .col(ColumnDef::new(Ticket::ChannelEpoch).binary_len(4).not_null())
27                    .col(ColumnDef::new(Ticket::Signature).binary_len(64).not_null())
28                    .col(ColumnDef::new(Ticket::Response).binary_len(32).not_null())
29                    .col(ColumnDef::new(Ticket::State).tiny_unsigned().not_null().default(0))
30                    .col(ColumnDef::new(Ticket::Hash).binary_len(32).not_null())
31                    .col(ColumnDef::new(Ticket::VrfParams).binary_len(97).not_null())
32                    .col(ColumnDef::new(Ticket::ChannelDst).binary_len(32).not_null())
33                    .to_owned(),
34            )
35            .await?;
36
37        manager
38            .create_index(
39                Index::create()
40                    .name("idx_ticket_channel")
41                    .if_not_exists()
42                    .table(Ticket::Table)
43                    .col(Ticket::ChannelId)
44                    .col(Ticket::ChannelEpoch)
45                    .to_owned(),
46            )
47            .await?;
48
49        manager
50            .create_index(
51                Index::create()
52                    .name("idx_ticket_counterparty")
53                    .if_not_exists()
54                    .table(Ticket::Table)
55                    .col(Ticket::Counterparty)
56                    .to_owned(),
57            )
58            .await?;
59
60        manager
61            .create_index(
62                Index::create()
63                    .name("idx_ticket_channel_id_epoch_index")
64                    .if_not_exists()
65                    .table(Ticket::Table)
66                    .col(Ticket::ChannelId)
67                    .col(Ticket::ChannelEpoch)
68                    .col(Ticket::Index)
69                    .unique()
70                    .to_owned(),
71            )
72            .await
73    }
74
75    async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
76        manager
77            .drop_index(Index::drop().name("idx_ticket_channel_id_epoch_index").to_owned())
78            .await?;
79
80        manager
81            .drop_index(Index::drop().name("idx_ticket_counterparty").to_owned())
82            .await?;
83
84        manager
85            .drop_index(Index::drop().name("idx_ticket_channel").to_owned())
86            .await?;
87
88        manager.drop_table(Table::drop().table(Ticket::Table).to_owned()).await
89    }
90}
91
92#[derive(DeriveIden)]
93enum Ticket {
94    Table,
95    Id,
96    ChannelId,
97    Counterparty,
98    Amount,
99    Index,
100    WinningProbability,
101    ChannelEpoch,
102    Signature,
103    Response,
104    State,
105    Hash,
106    VrfParams,
107    ChannelDst,
108}