li7y/src/main.rs

50 lines
1.6 KiB
Rust
Raw Normal View History

2024-06-24 22:46:04 +02:00
// SPDX-FileCopyrightText: 2024 Simon Bruder <simon@sbruder.de>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
use std::env;
use actix_web::{web, App, HttpServer};
use diesel::prelude::*;
use diesel::r2d2;
use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
2024-06-25 13:30:51 +02:00
use log::{debug, info};
2024-06-24 22:46:04 +02:00
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!();
#[actix_web::main]
async fn main() -> std::io::Result<()> {
env_logger::init();
let manager = r2d2::ConnectionManager::<PgConnection>::new(
env::var("DATABASE_URL").expect("DATABASE_URL must be set"),
);
let pool = r2d2::Pool::builder()
.build(manager)
.expect("database URL must be valid");
pool.get()
.expect("couldnt get db connection from pool")
.run_pending_migrations(MIGRATIONS)
.expect("failed to run migrations");
let address = env::var("LISTEN_ADDRESS").unwrap_or("::1".to_string());
let port = env::var("LISTEN_PORT").map_or(8080, |s| {
s.parse::<u16>().expect("failed to parse LISTEN_PORT")
});
2024-06-25 13:30:51 +02:00
let static_root = env::var("STATIC_ROOT").unwrap_or("static".to_string());
2024-06-24 22:46:04 +02:00
2024-06-25 13:30:51 +02:00
info!("Starting on {address}:{port} with static files from {static_root}");
debug!("Serving static files from {static_root}");
2024-06-24 22:46:04 +02:00
HttpServer::new(move || {
App::new()
.app_data(web::Data::new(pool.clone()))
2024-06-25 13:30:51 +02:00
.service(web::scope("/api/v1").configure(li7y::api::v1::config))
2024-06-24 22:46:04 +02:00
.service(actix_files::Files::new("/static", &static_root))
})
.bind((address, port))?
.run()
.await
}