|
mod api; |
|
mod entity; |
|
mod service; |
|
|
|
use std::env; |
|
use actix_files::Files; |
|
use actix_web::{web, App, HttpServer, middleware}; |
|
use listenfd::ListenFd; |
|
use sea_orm::{Database, DatabaseConnection}; |
|
use migration::{Migrator, MigratorTrait}; |
|
|
|
#[derive(Debug, Clone)] |
|
struct AppState { |
|
conn: DatabaseConnection, |
|
} |
|
|
|
#[actix_web::main] |
|
async fn main() -> std::io::Result<()> { |
|
std::env::set_var("RUST_LOG", "debug"); |
|
tracing_subscriber::fmt::init(); |
|
|
|
|
|
dotenvy::dotenv().ok(); |
|
let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file"); |
|
let host = env::var("HOST").expect("HOST is not set in .env file"); |
|
let port = env::var("PORT").expect("PORT is not set in .env file"); |
|
let server_url = format!("{host}:{port}"); |
|
|
|
|
|
|
|
let conn = Database::connect(&db_url).await.unwrap(); |
|
Migrator::up(&conn, None).await.unwrap(); |
|
|
|
let state = AppState { conn }; |
|
|
|
|
|
let mut listenfd = ListenFd::from_env(); |
|
let mut server = HttpServer::new(move || { |
|
App::new() |
|
.service(Files::new("/static", "./static")) |
|
.app_data(web::Data::new(state.clone())) |
|
.wrap(middleware::Logger::default()) |
|
.configure(init) |
|
}); |
|
|
|
server = match listenfd.take_tcp_listener(0)? { |
|
Some(listener) => server.listen(listener)?, |
|
None => server.bind(&server_url)?, |
|
}; |
|
|
|
println!("Starting server at {server_url}"); |
|
server.run().await?; |
|
|
|
Ok(()) |
|
} |
|
|
|
fn init(cfg: &mut web::ServiceConfig) { |
|
cfg.service(api::tag::create); |
|
cfg.service(api::tag::delete); |
|
cfg.service(api::tag::list); |
|
} |