74 lines
2.0 KiB
Rust
74 lines
2.0 KiB
Rust
mod api;
|
|
|
|
use rocket::{fairing, fairing::AdHoc, Build, Rocket};
|
|
use rocket_db_pools::{sqlx, Database};
|
|
use rocket_okapi::{
|
|
mount_endpoints_and_merged_docs, openapi,
|
|
rapidoc::*,
|
|
settings::{OpenApiSettings, UrlObject},
|
|
swagger_ui::{make_swagger_ui, SwaggerUIConfig},
|
|
};
|
|
|
|
#[macro_use]
|
|
extern crate rocket;
|
|
|
|
#[derive(Database)]
|
|
#[database("party")]
|
|
pub struct Db(sqlx::SqlitePool);
|
|
|
|
#[openapi]
|
|
#[get("/")]
|
|
fn index() -> String {
|
|
format!("Hello, world!")
|
|
}
|
|
|
|
async fn run_migrations(rocket: Rocket<Build>) -> fairing::Result {
|
|
match Db::fetch(&rocket) {
|
|
Some(db) => match sqlx::migrate!("db/migrations").run(&**db).await {
|
|
Ok(_) => {
|
|
println!("Migrations completed");
|
|
Ok(rocket)
|
|
}
|
|
Err(e) => {
|
|
error!("Failed to initialize SQLx database: {}", e);
|
|
Err(rocket)
|
|
}
|
|
},
|
|
None => Err(rocket),
|
|
}
|
|
}
|
|
|
|
#[launch]
|
|
fn rocket() -> _ {
|
|
let building_rocket = rocket::build()
|
|
.attach(Db::init())
|
|
.attach(AdHoc::try_on_ignite("SQLx Migrations", run_migrations))
|
|
.mount("/", routes![index])
|
|
.mount(
|
|
"/swagger",
|
|
make_swagger_ui(&SwaggerUIConfig {
|
|
url: "../api/openapi.json".to_owned(),
|
|
..Default::default()
|
|
}),
|
|
)
|
|
.mount(
|
|
"/rapidoc/",
|
|
make_rapidoc(&RapiDocConfig {
|
|
general: GeneralConfig {
|
|
spec_urls: vec![UrlObject::new("General", "../api/openapi.json")],
|
|
..Default::default()
|
|
},
|
|
hide_show: HideShowConfig {
|
|
allow_spec_url_load: false,
|
|
allow_spec_file_load: false,
|
|
..Default::default()
|
|
},
|
|
..Default::default()
|
|
}),
|
|
);
|
|
|
|
let openapi_settings = OpenApiSettings::default();
|
|
|
|
api::mount_endpoints(building_rocket, &openapi_settings)
|
|
}
|