mod.rs
96 lignes · 3871 octets
//! Database migrations for Rustwarden. //! //! Single source of truth for all SeaORM migrations bundled with the //! framework. Both the embedded auto-migrator (used by //! `RustwardenApp::auto_migrate`) and the standalone //! `migrate` binary read this list, so adding a migration in one place //! is sufficient — there is no parallel list to keep in sync. //! //! # Adding a new migration //! //! 1. Create `mYYYYMMDD_NNNNNN_<name>.rs` in this directory. //! 2. Add a `pub mod` declaration below. //! 3. Append `Box::new(mYYYYMMDD_NNNNNN_<name>::Migration)` to //! `core_migrations()`. //! //! # Example: extending with application-specific migrations //! //! ```rust,ignore //! use sea_orm_migration::prelude::*; //! use rustwarden_core::migrations; //! //! struct AppMigrator; //! //! #[async_trait::async_trait] //! impl MigratorTrait for AppMigrator { //! fn migrations() -> Vec<Box<dyn MigrationTrait>> { //! let mut all = migrations::core_migrations(); //! all.push(Box::new(MyCustomMigration)); //! all //! } //! } //! ``` /// Migration 1: initial schema (users, roles, refresh tokens, audit logs). pub mod m20260305_000001_initial_schema; /// Migration 2: application settings table. pub mod m20260306_000002_create_app_settings_table; /// Migration 3: RBAC permissions tables. pub mod m20260309_000003_create_permissions_tables; /// Migration 4: generic resources and resource-shares tables. pub mod m20260309_000004_create_resources_tables; /// Migration 5: OAuth accounts table. pub mod m20260310_000005_create_oauth_accounts_table; /// Migration 6: TOTP challenges and user-TOTP tables. pub mod m20260409_000006_create_totp_tables; /// Migration 7: personal access tokens table. pub mod m20260422_000007_create_personal_access_tokens; /// Migration 8: teams and team-members tables. pub mod m20260423_000008_create_teams; /// Migration 9: fediverse interop columns and `remote_identities` table. pub mod m20260510_000009_fediverse_interop; /// Migration 10: nullable `user_totp.last_used_step` anti-replay column (RFC 0037). pub mod m20260918_000010_totp_last_used_step; /// Migration 11: `pending_email_changes` table for two-step email change (RFC 0041). pub mod m20260919_000011_pending_email_changes; use sea_orm_migration::prelude::*; /// Returns all core Rustwarden migrations in order. pub fn core_migrations() -> Vec<Box<dyn MigrationTrait>> { vec![ Box::new(m20260305_000001_initial_schema::Migration), Box::new(m20260306_000002_create_app_settings_table::Migration), Box::new(m20260309_000003_create_permissions_tables::Migration), Box::new(m20260309_000004_create_resources_tables::Migration), Box::new(m20260310_000005_create_oauth_accounts_table::Migration), Box::new(m20260409_000006_create_totp_tables::Migration), Box::new(m20260422_000007_create_personal_access_tokens::Migration), Box::new(m20260423_000008_create_teams::Migration), Box::new(m20260510_000009_fediverse_interop::Migration), Box::new(m20260918_000010_totp_last_used_step::Migration), Box::new(m20260919_000011_pending_email_changes::Migration), ] } /// SeaORM migrator running every core Rustwarden migration in order. /// /// Used both by the embedded [`run_migrations`] helper and by the /// standalone `migrate` binary. Implements [`MigratorTrait`] so it can /// be passed to `cli::run_cli` for `up` / `down` / `refresh` / `status` /// subcommands. pub struct CoreMigrator; #[async_trait::async_trait] impl MigratorTrait for CoreMigrator { fn migrations() -> Vec<Box<dyn MigrationTrait>> { core_migrations() } } /// Run all pending core migrations on the database. pub async fn run_migrations( db: &sea_orm::DatabaseConnection, ) -> Result<(), sea_orm_migration::DbErr> { CoreMigrator::up(db, None).await }
GitRust