| 142 | |
| 143 | #[tokio::main] |
| 144 | pub async fn main() { |
| 145 | std::env::set_var("RUST_LOG", "debug"); |
| 146 | tracing_subscriber::fmt::init(); |
| 147 | |
| 148 | // get env vars |
| 149 | dotenvy::dotenv().ok(); |
| 150 | let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file"); |
| 151 | let host = env::var("HOST").expect("HOST is not set in .env file"); |
| 152 | let port = env::var("PORT").expect("PORT is not set in .env file"); |
| 153 | let server_url = format!("{host}:{port}"); |
| 154 | |
| 155 | // create post table if not exists |
| 156 | let conn = Database::connect(&db_url).await.unwrap(); |
| 157 | Migrator::up(&conn, None).await.unwrap(); |
| 158 | let templates = Tera::new(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/**/*")).unwrap(); |
| 159 | let state = AppState { templates, conn }; |
| 160 | |
| 161 | println!("Starting server at {server_url}"); |
| 162 | |
| 163 | let router = Router::new() |
| 164 | .hoop(affix::inject(state)) |
| 165 | .post(create) |
| 166 | .get(list) |
| 167 | .push(Router::with_path("new").get(new)) |
| 168 | .push(Router::with_path("<id>").get(edit).post(update)) |
| 169 | .push(Router::with_path("delete/<id>").post(delete)) |
| 170 | .push( |
| 171 | Router::with_path("static/<**>").get(salvo::prelude::StaticDir::new(concat!( |
| 172 | env!("CARGO_MANIFEST_DIR"), |
| 173 | "/static" |
| 174 | ))), |
| 175 | ); |
| 176 | |
| 177 | Server::new(TcpListener::bind(TcpListener::new(format!("{host}:{port}"))).await) |
| 178 | .serve(router) |
| 179 | .await; |
| 180 | } |