migration/
m20240301_000012_tickets_create_outgoing_ticket_index.rs1use 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}