summaryrefslogtreecommitdiff
path: root/rust/schist_backend/src/main.rs
blob: 83956813042781399f98917368970ab7765b07a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use schist_schema::migrations::MIGRATIONS;
use diesel::SqliteConnection;
use diesel_migrations::MigrationHarness;
use rocket::fairing::AdHoc;
use rocket::http::ContentType;
use rocket::{launch, routes, Build, Rocket};

use crate::databases::UserDataDb;

pub mod databases;
pub mod routes;

fn run_database_migrations(connection: &mut SqliteConnection) {
    connection
        .run_pending_migrations(MIGRATIONS)
        .expect("Error running database migrations");
}

#[launch]
async fn rocket() -> Rocket<Build> {
    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;
            })
        }))
        .attach(AdHoc::on_response("Add CORS headers", |_req, res| {
            Box::pin(async move {
                res.set_header(ContentType::JSON);
                res.set_header(rocket::http::Header::new(
                    "Access-Control-Allow-Origin",
                    "http://localhost:5173",
                ));
            })
        }))
        .mount(
            "/",
            routes![
                routes::account::get_all_accounts,
                routes::account::create_account,
                routes::category::get_all_categories,
            ],
        )
}