Add database connection to app data and run integrity check

This commit is contained in:
Reimar 2024-08-13 15:12:21 +02:00
parent 7552197fc6
commit fb5c0bdf2a

View File

@ -1,13 +1,24 @@
use actix_web::{get, Responder, HttpResponse, HttpServer, App}; use actix_web::{get, Responder, HttpResponse, HttpServer, App, web};
use std::sync::{Mutex, Arc};
mod embedded { mod embedded {
use refinery::embed_migrations; use refinery::embed_migrations;
embed_migrations!("./migrations"); embed_migrations!("./migrations");
} }
struct AppData {
database: Arc<Mutex<rusqlite::Connection>>,
}
#[get("/hc")] #[get("/hc")]
async fn healthcheck() -> impl Responder { async fn healthcheck(data: web::Data<AppData>) -> impl Responder {
HttpResponse::Ok().body("OK") let db = data.database.lock().unwrap();
match db.pragma_query(None, "integrity_check", |_| Ok(())) {
Ok(_) => HttpResponse::Ok().body("OK"),
Err(_) => HttpResponse::InternalServerError().body("Error"),
}
} }
#[actix_web::main] #[actix_web::main]
@ -22,14 +33,22 @@ async fn main() -> std::io::Result<()> {
println!("Opening database: {}", database_path); println!("Opening database: {}", database_path);
let mut conn = rusqlite::Connection::open(database_path).unwrap(); let mut conn = rusqlite::Connection::open(database_path.clone()).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap(); embedded::migrations::runner().run(&mut conn).unwrap();
println!("Starting web server at port {}", port); println!("Starting web server at port {}", port);
HttpServer::new(|| { HttpServer::new(|| {
let database_path = std::env::var("RUST_BACKEND_DB")
.unwrap_or("database.sqlite3".to_string());
let conn = Arc::new(Mutex::new(rusqlite::Connection::open(database_path).unwrap()));
App::new() App::new()
.app_data(web::Data::new(AppData {
database: conn,
}))
.service(healthcheck) .service(healthcheck)
}) })
.bind(("0.0.0.0", port))? .bind(("0.0.0.0", port))?