migration/
m20240301_000012_tickets_create_outgoing_ticket_index.rs

1use crate::BackendType;
2use sea_orm_migration::prelude::*;
3
4#[derive(DeriveMigrationName)]
5pub struct Migration(pub crate::BackendType);
6
7#[async_trait::async_trait]
8impl MigrationTrait for Migration {
9    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
10        let mut table = Table::create()
11            .table(OutgoingTicketIndex::Table)
12            .if_not_exists()
13            .col(
14                ColumnDef::new(OutgoingTicketIndex::Id)
15                    .integer()
16                    .not_null()
17                    .auto_increment()
18                    .primary_key(),
19            )
20            .col(
21                ColumnDef::new(OutgoingTicketIndex::ChannelId)
22                    .string_len(64)
23                    .not_null()
24                    .unique_key(),
25            )
26            .col(
27                ColumnDef::new(OutgoingTicketIndex::Index)
28                    .not_null()
29                    .binary_len(8)
30                    .default(vec![0u8; 8]),
31            )
32            .to_owned();
33
34        manager
35            .create_table(if self.0 != BackendType::SQLite {
36                table
37                    .foreign_key(
38                        ForeignKey::create()
39                            .name("fk_ticket_channel")
40                            .from_tbl(OutgoingTicketIndex::Table)
41                            .from_col(OutgoingTicketIndex::ChannelId)
42                            .to_tbl(Channel::Table)
43                            .to_col(Channel::ChannelId)
44                            .on_delete(ForeignKeyAction::Cascade)
45                            .on_update(ForeignKeyAction::Restrict),
46                    )
47                    .to_owned()
48            } else {
49                table
50            })
51            .await
52    }
53
54    async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
55        manager
56            .drop_table(Table::drop().table(OutgoingTicketIndex::Table).to_owned())
57            .await
58    }
59}
60
61#[derive(DeriveIden)]
62enum OutgoingTicketIndex {
63    Table,
64    Id,
65    ChannelId,
66    Index,
67}
68
69#[allow(clippy::enum_variant_names)]
70#[derive(DeriveIden)]
71enum Channel {
72    Table,
73    ChannelId,
74}