use sea_orm_migration::prelude::*; use super::m20260317_000001_create_artists::Artists; use super::m20260317_000002_create_albums::Albums; use super::m20260317_000003_create_tracks::Tracks; #[derive(DeriveMigrationName)] pub struct Migration; #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( Table::create() .table(WantedItems::Table) .if_not_exists() .col( ColumnDef::new(WantedItems::Id) .integer() .not_null() .auto_increment() .primary_key(), ) .col(ColumnDef::new(WantedItems::ItemType).text().not_null()) .col(ColumnDef::new(WantedItems::ArtistId).integer()) .col(ColumnDef::new(WantedItems::AlbumId).integer()) .col(ColumnDef::new(WantedItems::TrackId).integer()) .col( ColumnDef::new(WantedItems::Status) .text() .not_null() .default("wanted"), ) .col( ColumnDef::new(WantedItems::AddedAt) .date_time() .not_null() .default(Expr::current_timestamp()), ) .col( ColumnDef::new(WantedItems::UpdatedAt) .date_time() .not_null() .default(Expr::current_timestamp()), ) .foreign_key( ForeignKey::create() .name("fk_wanted_artist_id") .from(WantedItems::Table, WantedItems::ArtistId) .to(Artists::Table, Artists::Id) .on_delete(ForeignKeyAction::Cascade), ) .foreign_key( ForeignKey::create() .name("fk_wanted_album_id") .from(WantedItems::Table, WantedItems::AlbumId) .to(Albums::Table, Albums::Id) .on_delete(ForeignKeyAction::Cascade), ) .foreign_key( ForeignKey::create() .name("fk_wanted_track_id") .from(WantedItems::Table, WantedItems::TrackId) .to(Tracks::Table, Tracks::Id) .on_delete(ForeignKeyAction::Cascade), ) .to_owned(), ) .await?; manager .create_index( Index::create() .name("idx_wanted_items_status") .table(WantedItems::Table) .col(WantedItems::Status) .to_owned(), ) .await?; Ok(()) } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .drop_table(Table::drop().table(WantedItems::Table).to_owned()) .await } } #[derive(DeriveIden)] pub(crate) enum WantedItems { Table, Id, ItemType, ArtistId, AlbumId, TrackId, Status, AddedAt, UpdatedAt, }