use diesel::SqliteConnection; use diesel_migrations::MigrationHarness; use diesel_migrations::{embed_migrations, EmbeddedMigrations}; use rocket::fairing::AdHoc; use rocket::{launch, routes, Build, Rocket}; use crate::databases::UserDataDb; pub mod databases; pub mod models; pub mod routes; pub mod schema; pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); fn run_database_migrations(connection: &mut SqliteConnection) { connection .run_pending_migrations(MIGRATIONS) .expect("Error running database migrations"); } #[launch] async fn rocket() -> Rocket { rocket::build() .attach(UserDataDb::fairing()) .attach(AdHoc::on_liftoff("Database Migration", |rocket| { Box::pin(async move { let user_data_db = UserDataDb::get_one(rocket).await.expect( "Failed to get connection to user data database in order to run migrations", ); user_data_db.run(run_database_migrations).await; }) })) .mount( "/", routes![ routes::account::get_all_accounts, routes::account::create_account ], ) }