Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions database/entities/src/entities/discount.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions database/entities/src/entities/mod.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions database/entities/src/entities/prelude.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions database/entities/src/entities/referral.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 18 additions & 1 deletion database/entities/src/entities/tracked_links.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions database/entities/src/entities/transaction.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions database/migrations/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ mod m20260928_000000_create_player_mods;
mod m20260929_000000_product_for_sale;
mod m20261014_000000_create_dm_delegates;
mod m20261015_000000_create_outfits_and_skins;
mod m20261017_000000_create_referrals;
mod m20261017_000000_create_linked_accounts;

pub struct Migrator;
Expand Down Expand Up @@ -152,6 +153,7 @@ impl MigratorTrait for Migrator {
Box::new(m20260929_000000_product_for_sale::Migration),
Box::new(m20261014_000000_create_dm_delegates::Migration),
Box::new(m20261015_000000_create_outfits_and_skins::Migration),
Box::new(m20261017_000000_create_referrals::Migration),
Box::new(m20261017_000000_create_linked_accounts::Migration),
]
}
Expand Down
123 changes: 123 additions & 0 deletions database/migrations/src/m20261017_000000_create_referrals.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
use sea_orm_migration::prelude::*;

#[derive(DeriveMigrationName)]
pub struct Migration;

/// A creator code. With a coupon linked, using it also applies that coupon.
#[derive(DeriveIden)]
enum Referral {
Table,
/// Stored and matched upper case.
Code,
Name,
DiscountId,
Enabled,
CreatedAt,
}

#[derive(DeriveIden)]
enum Discount {
Table,
Id,
}

#[derive(DeriveIden)]
enum Transaction {
Table,
/// No foreign key: attribution outlives a deleted code.
ReferralCode,
}

#[derive(DeriveIden)]
enum TrackedLinks {
Table,
ReferralCode,
}

#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_table(
Table::create()
.table(Referral::Table)
.if_not_exists()
.col(
ColumnDef::new(Referral::Code)
.text()
.not_null()
.primary_key(),
)
.col(ColumnDef::new(Referral::Name).text().not_null())
.col(ColumnDef::new(Referral::DiscountId).integer().null())
.col(
ColumnDef::new(Referral::Enabled)
.boolean()
.not_null()
.default(true),
)
.col(
ColumnDef::new(Referral::CreatedAt)
.timestamp_with_time_zone()
.not_null()
.default(Expr::current_timestamp()),
)
.foreign_key(
ForeignKey::create()
.from(Referral::Table, Referral::DiscountId)
.to(Discount::Table, Discount::Id)
.on_delete(ForeignKeyAction::SetNull),
)
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(Transaction::Table)
.add_column(ColumnDef::new(Transaction::ReferralCode).text().null())
.to_owned(),
)
.await?;

manager
.alter_table(
Table::alter()
.table(TrackedLinks::Table)
.add_column(ColumnDef::new(TrackedLinks::ReferralCode).text().null())
.add_foreign_key(
TableForeignKey::new()
.from_tbl(TrackedLinks::Table)
.from_col(TrackedLinks::ReferralCode)
.to_tbl(Referral::Table)
.to_col(Referral::Code)
.on_delete(ForeignKeyAction::SetNull),
)
.to_owned(),
)
.await
}

async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.alter_table(
Table::alter()
.table(TrackedLinks::Table)
.drop_column(TrackedLinks::ReferralCode)
.to_owned(),
)
.await?;
manager
.alter_table(
Table::alter()
.table(Transaction::Table)
.drop_column(Transaction::ReferralCode)
.to_owned(),
)
.await?;
manager
.drop_table(Table::drop().table(Referral::Table).to_owned())
.await
}
}
Loading
Loading