303 lines
10 KiB
Rust
303 lines
10 KiB
Rust
use sea_orm_migration::prelude::*;
|
|
|
|
pub struct Migration;
|
|
|
|
impl MigrationName for Migration {
|
|
fn name(&self) -> &str {
|
|
"m_20230730_000001_create_repo_tables"
|
|
}
|
|
}
|
|
|
|
#[async_trait::async_trait]
|
|
impl MigrationTrait for Migration {
|
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(Distro::Table)
|
|
.col(
|
|
ColumnDef::new(Distro::Id)
|
|
.integer()
|
|
.not_null()
|
|
.auto_increment()
|
|
.primary_key(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(Distro::Name)
|
|
.string()
|
|
.not_null()
|
|
.unique_key(),
|
|
)
|
|
.col(ColumnDef::new(Distro::Description).string())
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(Repo::Table)
|
|
.col(
|
|
ColumnDef::new(Repo::Id)
|
|
.integer()
|
|
.not_null()
|
|
.auto_increment()
|
|
.primary_key(),
|
|
)
|
|
.col(ColumnDef::new(Repo::DistroId).integer().not_null())
|
|
.col(ColumnDef::new(Repo::Name).string().not_null().unique_key())
|
|
.col(ColumnDef::new(Repo::Description).string())
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-repo-distro_id")
|
|
.from(Repo::Table, Repo::DistroId)
|
|
.to(Distro::Table, Distro::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(Package::Table)
|
|
.col(
|
|
ColumnDef::new(Package::Id)
|
|
.integer()
|
|
.not_null()
|
|
.auto_increment()
|
|
.primary_key(),
|
|
)
|
|
.col(ColumnDef::new(Package::RepoId).integer().not_null())
|
|
.col(ColumnDef::new(Package::Base).string_len(255).not_null())
|
|
.col(ColumnDef::new(Package::Name).string_len(255).not_null())
|
|
.col(ColumnDef::new(Package::Version).string_len(255).not_null())
|
|
.col(ColumnDef::new(Package::Arch).string_len(255).not_null())
|
|
.col(ColumnDef::new(Package::Size).big_integer().not_null())
|
|
.col(ColumnDef::new(Package::CSize).big_integer().not_null())
|
|
.col(ColumnDef::new(Package::Description).string())
|
|
.col(ColumnDef::new(Package::Url).string_len(255))
|
|
.col(ColumnDef::new(Package::BuildDate).date_time().not_null())
|
|
.col(ColumnDef::new(Package::Packager).string_len(255))
|
|
.col(ColumnDef::new(Package::PgpSig).string_len(255))
|
|
.col(ColumnDef::new(Package::PgpSigSize).big_integer())
|
|
.col(ColumnDef::new(Package::Sha256Sum).char_len(64).not_null())
|
|
.col(
|
|
ColumnDef::new(Package::Compression)
|
|
.string_len(16)
|
|
.not_null(),
|
|
)
|
|
.col(ColumnDef::new(Package::State).integer().not_null())
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-package-repo_id")
|
|
.from(Package::Table, Package::RepoId)
|
|
.to(Repo::Table, Repo::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(PackageLicense::Table)
|
|
.col(
|
|
ColumnDef::new(PackageLicense::PackageId)
|
|
.integer()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(PackageLicense::Name)
|
|
.string_len(255)
|
|
.not_null(),
|
|
)
|
|
.primary_key(
|
|
Index::create()
|
|
.col(PackageLicense::PackageId)
|
|
.col(PackageLicense::Name),
|
|
)
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-package_license-package_id")
|
|
.from(PackageLicense::Table, PackageLicense::PackageId)
|
|
.to(Package::Table, Package::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(PackageGroup::Table)
|
|
.col(ColumnDef::new(PackageGroup::PackageId).integer().not_null())
|
|
.col(
|
|
ColumnDef::new(PackageGroup::Name)
|
|
.string_len(255)
|
|
.not_null(),
|
|
)
|
|
.primary_key(
|
|
Index::create()
|
|
.col(PackageGroup::PackageId)
|
|
.col(PackageGroup::Name),
|
|
)
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-package_group-package_id")
|
|
.from(PackageGroup::Table, PackageGroup::PackageId)
|
|
.to(Package::Table, Package::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(PackageRelated::Table)
|
|
.col(
|
|
ColumnDef::new(PackageRelated::PackageId)
|
|
.integer()
|
|
.not_null(),
|
|
)
|
|
.col(ColumnDef::new(PackageRelated::Type).integer().not_null())
|
|
.col(
|
|
ColumnDef::new(PackageRelated::Name)
|
|
.string_len(255)
|
|
.not_null(),
|
|
)
|
|
.primary_key(
|
|
Index::create()
|
|
.col(PackageRelated::PackageId)
|
|
.col(PackageRelated::Type)
|
|
.col(PackageRelated::Name),
|
|
)
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-package_depends-package_id")
|
|
.from(PackageRelated::Table, PackageRelated::PackageId)
|
|
.to(Package::Table, Package::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(PackageFile::Table)
|
|
.col(ColumnDef::new(PackageFile::PackageId).integer().not_null())
|
|
.col(ColumnDef::new(PackageFile::Path).string_len(255).not_null())
|
|
.primary_key(
|
|
Index::create()
|
|
.col(PackageFile::PackageId)
|
|
.col(PackageFile::Path),
|
|
)
|
|
.foreign_key(
|
|
ForeignKey::create()
|
|
.name("fk-package_file-package_id")
|
|
.from(PackageFile::Table, PackageFile::PackageId)
|
|
.to(Package::Table, Package::Id)
|
|
.on_delete(ForeignKeyAction::Cascade),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
// Define how to rollback this migration: Drop the Bakery table.
|
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
manager
|
|
.drop_table(Table::drop().table(PackageLicense::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(PackageGroup::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(PackageRelated::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(PackageFile::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(Package::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(Repo::Table).to_owned())
|
|
.await?;
|
|
manager
|
|
.drop_table(Table::drop().table(Distro::Table).to_owned())
|
|
.await
|
|
}
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum Distro {
|
|
Table,
|
|
Id,
|
|
Name,
|
|
Description,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum Repo {
|
|
Table,
|
|
Id,
|
|
DistroId,
|
|
Name,
|
|
Description,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum Package {
|
|
Table,
|
|
Id,
|
|
RepoId,
|
|
Name,
|
|
Base,
|
|
Version,
|
|
Description,
|
|
Size,
|
|
CSize,
|
|
Url,
|
|
Arch,
|
|
BuildDate,
|
|
Packager,
|
|
PgpSig,
|
|
PgpSigSize,
|
|
Sha256Sum,
|
|
Compression,
|
|
State,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum PackageLicense {
|
|
Table,
|
|
PackageId,
|
|
Name,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum PackageGroup {
|
|
Table,
|
|
PackageId,
|
|
Name,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum PackageRelated {
|
|
Table,
|
|
PackageId,
|
|
Type,
|
|
Name,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
pub enum PackageFile {
|
|
Table,
|
|
PackageId,
|
|
Path,
|
|
}
|