From f3ec651657793ccbbc436629e0aaa9c30ae810df Mon Sep 17 00:00:00 2001 From: husky Date: Mon, 17 Mar 2025 12:55:18 -0700 Subject: [PATCH] initial migrations for derank lists --- authservice/entity/src/announcement.rs | 2 +- authservice/entity/src/derank_list_entry.rs | 37 +++++++++ authservice/entity/src/derank_list_meta.rs | 49 ++++++++++++ .../entity/src/derank_list_subscription.rs | 47 +++++++++++ authservice/entity/src/invite_code.rs | 2 +- authservice/entity/src/lib.rs | 5 +- authservice/entity/src/prelude.rs | 5 +- authservice/entity/src/user.rs | 18 ++++- authservice/entity/src/user_session.rs | 2 +- authservice/entity/src/user_settings.rs | 2 +- authservice/entity/src/verification_code.rs | 2 +- authservice/migration/src/lib.rs | 6 ++ ...m20250317_192753_create_deranklist_meta.rs | 55 +++++++++++++ ...20250317_193359_create_deranklist_entry.rs | 69 +++++++++++++++++ ...7_194216_create_deranklist_subscription.rs | 77 +++++++++++++++++++ 15 files changed, 370 insertions(+), 8 deletions(-) create mode 100644 authservice/entity/src/derank_list_entry.rs create mode 100644 authservice/entity/src/derank_list_meta.rs create mode 100644 authservice/entity/src/derank_list_subscription.rs create mode 100644 authservice/migration/src/m20250317_192753_create_deranklist_meta.rs create mode 100644 authservice/migration/src/m20250317_193359_create_deranklist_entry.rs create mode 100644 authservice/migration/src/m20250317_194216_create_deranklist_subscription.rs diff --git a/authservice/entity/src/announcement.rs b/authservice/entity/src/announcement.rs index 1d6093c..2a67617 100644 --- a/authservice/entity/src/announcement.rs +++ b/authservice/entity/src/announcement.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; diff --git a/authservice/entity/src/derank_list_entry.rs b/authservice/entity/src/derank_list_entry.rs new file mode 100644 index 0000000..c044f79 --- /dev/null +++ b/authservice/entity/src/derank_list_entry.rs @@ -0,0 +1,37 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] +#[sea_orm(table_name = "derank_list_entry")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub entry_id: String, + pub derank_list_id: String, + pub url_match: String, + pub and: Option, + pub unless: Option, + #[sea_orm(column_type = "Double")] + pub multiplier: f64, + pub comment: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::derank_list_meta::Entity", + from = "Column::DerankListId", + to = "super::derank_list_meta::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + DerankListMeta, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListMeta.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/authservice/entity/src/derank_list_meta.rs b/authservice/entity/src/derank_list_meta.rs new file mode 100644 index 0000000..828430d --- /dev/null +++ b/authservice/entity/src/derank_list_meta.rs @@ -0,0 +1,49 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[sea_orm(table_name = "derank_list_meta")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + pub name: Option, + pub owner: String, + pub description: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm(has_many = "super::derank_list_entry::Entity")] + DerankListEntry, + #[sea_orm(has_many = "super::derank_list_subscription::Entity")] + DerankListSubscription, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::Owner", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListEntry.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListSubscription.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/authservice/entity/src/derank_list_subscription.rs b/authservice/entity/src/derank_list_subscription.rs new file mode 100644 index 0000000..f88bd8f --- /dev/null +++ b/authservice/entity/src/derank_list_subscription.rs @@ -0,0 +1,47 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 + +use sea_orm::entity::prelude::*; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] +#[sea_orm(table_name = "derank_list_subscription")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: String, + pub user_id: String, + pub derank_list_id: String, + pub active: bool, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::derank_list_meta::Entity", + from = "Column::DerankListId", + to = "super::derank_list_meta::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + DerankListMeta, + #[sea_orm( + belongs_to = "super::user::Entity", + from = "Column::UserId", + to = "super::user::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + User, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListMeta.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::User.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/authservice/entity/src/invite_code.rs b/authservice/entity/src/invite_code.rs index 5876a27..073192c 100644 --- a/authservice/entity/src/invite_code.rs +++ b/authservice/entity/src/invite_code.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; diff --git a/authservice/entity/src/lib.rs b/authservice/entity/src/lib.rs index a699391..0deb90a 100644 --- a/authservice/entity/src/lib.rs +++ b/authservice/entity/src/lib.rs @@ -1,8 +1,11 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 pub mod prelude; pub mod announcement; +pub mod derank_list_entry; +pub mod derank_list_meta; +pub mod derank_list_subscription; pub mod invite_code; pub mod user; pub mod user_session; diff --git a/authservice/entity/src/prelude.rs b/authservice/entity/src/prelude.rs index 32f9675..bfb06d7 100644 --- a/authservice/entity/src/prelude.rs +++ b/authservice/entity/src/prelude.rs @@ -1,6 +1,9 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 pub use super::announcement::Entity as Announcement; +pub use super::derank_list_entry::Entity as DerankListEntry; +pub use super::derank_list_meta::Entity as DerankListMeta; +pub use super::derank_list_subscription::Entity as DerankListSubscription; pub use super::invite_code::Entity as InviteCode; pub use super::user::Entity as User; pub use super::user_session::Entity as UserSession; diff --git a/authservice/entity/src/user.rs b/authservice/entity/src/user.rs index 66a3526..55fd84d 100644 --- a/authservice/entity/src/user.rs +++ b/authservice/entity/src/user.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; @@ -22,6 +22,10 @@ pub struct Model { pub enum Relation { #[sea_orm(has_many = "super::announcement::Entity")] Announcement, + #[sea_orm(has_many = "super::derank_list_meta::Entity")] + DerankListMeta, + #[sea_orm(has_many = "super::derank_list_subscription::Entity")] + DerankListSubscription, #[sea_orm(has_many = "super::invite_code::Entity")] InviteCode, #[sea_orm(has_many = "super::user_session::Entity")] @@ -36,6 +40,18 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListMeta.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::DerankListSubscription.def() + } +} + impl Related for Entity { fn to() -> RelationDef { Relation::InviteCode.def() diff --git a/authservice/entity/src/user_session.rs b/authservice/entity/src/user_session.rs index e222ab8..edcff2f 100644 --- a/authservice/entity/src/user_session.rs +++ b/authservice/entity/src/user_session.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; diff --git a/authservice/entity/src/user_settings.rs b/authservice/entity/src/user_settings.rs index eed2cd5..9dc6f37 100644 --- a/authservice/entity/src/user_settings.rs +++ b/authservice/entity/src/user_settings.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; diff --git a/authservice/entity/src/verification_code.rs b/authservice/entity/src/verification_code.rs index b53ad3b..d0fd9e8 100644 --- a/authservice/entity/src/verification_code.rs +++ b/authservice/entity/src/verification_code.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.1 use sea_orm::entity::prelude::*; diff --git a/authservice/migration/src/lib.rs b/authservice/migration/src/lib.rs index 2936978..f87973d 100644 --- a/authservice/migration/src/lib.rs +++ b/authservice/migration/src/lib.rs @@ -6,6 +6,9 @@ mod m20240814_014654_create_user_session; mod m20240814_015232_create_verification_code; mod m20240829_214347_create_user_settings; mod m20241115_003101_create_announcement; +mod m20250317_192753_create_deranklist_meta; +mod m20250317_193359_create_deranklist_entry; +mod m20250317_194216_create_deranklist_subscription; pub struct Migrator; @@ -19,6 +22,9 @@ impl MigratorTrait for Migrator { Box::new(m20240814_015232_create_verification_code::Migration), Box::new(m20240829_214347_create_user_settings::Migration), Box::new(m20241115_003101_create_announcement::Migration), + Box::new(m20250317_192753_create_deranklist_meta::Migration), + Box::new(m20250317_193359_create_deranklist_entry::Migration), + Box::new(m20250317_194216_create_deranklist_subscription::Migration), ] } } diff --git a/authservice/migration/src/m20250317_192753_create_deranklist_meta.rs b/authservice/migration/src/m20250317_192753_create_deranklist_meta.rs new file mode 100644 index 0000000..572c3f9 --- /dev/null +++ b/authservice/migration/src/m20250317_192753_create_deranklist_meta.rs @@ -0,0 +1,55 @@ +use crate::m20240814_013106_create_user::User; +use sea_orm_migration::{prelude::*, schema::*}; + +#[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(DerankListMeta::Table) + .if_not_exists() + .col( + ColumnDef::new(DerankListMeta::Id) + .string() + .not_null() + .unique_key() + .primary_key(), + ) + .col(ColumnDef::new(DerankListMeta::Name).string()) + .col(ColumnDef::new(DerankListMeta::Owner).string().not_null()) + .col( + ColumnDef::new(DerankListMeta::Description) + .string() + .not_null(), + ) + .foreign_key( + ForeignKey::create() + .name("fk-deranklistmeta-owner") + .from(DerankListMeta::Table, DerankListMeta::Owner) + .to(User::Table, User::Id) + .on_delete(ForeignKeyAction::SetNull), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(DerankListMeta::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +pub enum DerankListMeta { + Table, + Id, + Name, + Owner, + Description, +} diff --git a/authservice/migration/src/m20250317_193359_create_deranklist_entry.rs b/authservice/migration/src/m20250317_193359_create_deranklist_entry.rs new file mode 100644 index 0000000..7625d40 --- /dev/null +++ b/authservice/migration/src/m20250317_193359_create_deranklist_entry.rs @@ -0,0 +1,69 @@ +use crate::m20250317_192753_create_deranklist_meta::DerankListMeta; +use sea_orm_migration::{prelude::*, schema::*}; + +#[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(DerankListEntry::Table) + .if_not_exists() + .col( + ColumnDef::new(DerankListEntry::EntryId) + .string() + .not_null() + .unique_key() + .primary_key(), + ) + .col( + ColumnDef::new(DerankListEntry::DerankListId) + .string() + .not_null(), + ) + .col( + ColumnDef::new(DerankListEntry::UrlMatch) + .string() + .not_null(), + ) + .col(ColumnDef::new(DerankListEntry::And).string()) + .col(ColumnDef::new(DerankListEntry::Unless).string()) + .col( + ColumnDef::new(DerankListEntry::Multiplier) + .double() + .not_null(), + ) + .col(ColumnDef::new(DerankListEntry::Comment).string()) + .foreign_key( + ForeignKey::create() + .name("fk-deranklistentry-deranklist") + .from(DerankListEntry::Table, DerankListEntry::DerankListId) + .to(DerankListMeta::Table, DerankListMeta::Id) + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(DerankListEntry::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +enum DerankListEntry { + Table, + EntryId, + DerankListId, + UrlMatch, + And, + Unless, + Multiplier, + Comment, +} diff --git a/authservice/migration/src/m20250317_194216_create_deranklist_subscription.rs b/authservice/migration/src/m20250317_194216_create_deranklist_subscription.rs new file mode 100644 index 0000000..e325ffa --- /dev/null +++ b/authservice/migration/src/m20250317_194216_create_deranklist_subscription.rs @@ -0,0 +1,77 @@ +use crate::m20240814_013106_create_user::User; +use crate::m20250317_192753_create_deranklist_meta::DerankListMeta; +use sea_orm_migration::{prelude::*, schema::*}; + +#[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(DerankListSubscription::Table) + .if_not_exists() + .col( + ColumnDef::new(DerankListSubscription::Id) + .string() + .not_null() + .unique_key() + .primary_key(), + ) + .col( + ColumnDef::new(DerankListSubscription::UserId) + .string() + .not_null(), + ) + .col( + ColumnDef::new(DerankListSubscription::DerankListId) + .string() + .not_null(), + ) + .col( + ColumnDef::new(DerankListSubscription::Active) + .boolean() + .not_null(), + ) + .foreign_key( + ForeignKey::create() + .name("fk-deranklistsubscription-userid") + .from( + DerankListSubscription::Table, + DerankListSubscription::UserId, + ) + .to(User::Table, User::Id) + .on_delete(ForeignKeyAction::Cascade), + ) + .foreign_key( + ForeignKey::create() + .name("fk-deranklistsubscription-deranklistid") + .from( + DerankListSubscription::Table, + DerankListSubscription::DerankListId, + ) + .to(DerankListMeta::Table, DerankListMeta::Id) + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(DerankListSubscription::Table).to_owned()) + .await + } +} + +#[derive(DeriveIden)] +enum DerankListSubscription { + Table, + Id, + UserId, + DerankListId, + Active, +}