67 lines
3.1 KiB
Rust
67 lines
3.1 KiB
Rust
|
use actix_web::{get, HttpRequest, Responder};
|
||
|
use maud::html;
|
||
|
mod item;
|
||
|
|
||
|
// ░░░░░░░░░░▀▀▀██████▄▄▄░░░░░░░░░░
|
||
|
// ░░░░░░░░░░░░░░░░░▀▀▀████▄░░░░░░░
|
||
|
// ░░░░░░░░░░▄███████▀░░░▀███▄░░░░░
|
||
|
// ░░░░░░░░▄███████▀░░░░░░░▀███▄░░░
|
||
|
// ░░░░░░▄████████░░░░░░░░░░░███▄░░
|
||
|
// ░░░░░██████████▄░░░░░░░░░░░███▌░ ▒█▀▀█ █▀▀█ █▀▄▀█ █▀▄▀█ ▒█▀▀▄ ▒█▀▀█
|
||
|
// ░░░░░▀█████▀░▀███▄░░░░░░░░░▐███░ ▒█░░░ █░░█ █░▀░█ █░▀░█ ▒█░▒█ ▒█▀▀▄
|
||
|
// ░░░░░░░▀█▀░░░░░▀███▄░░░░░░░▐███░ ▒█▄▄█ ▀▀▀▀ ▀░░░▀ ▀░░░▀ ▒█▄▄▀ ▒█▄▄█
|
||
|
// ░░░░░░░░░░░░░░░░░▀███▄░░░░░███▌░
|
||
|
// ░░░░▄██▄░░░░░░░░░░░▀███▄░░▐███░░
|
||
|
// ░░▄██████▄░░░░░░░░░░░▀███▄███░░░
|
||
|
// ░█████▀▀████▄▄░░░░░░░░▄█████░░░░
|
||
|
// ░████▀░░░▀▀█████▄▄▄▄█████████▄░░
|
||
|
// ░░▀▀░░░░░░░░░▀▀██████▀▀░░░▀▀██░░
|
||
|
|
||
|
#[get("/item/{item_id}")]
|
||
|
pub async fn item_page(r: HttpRequest) -> impl Responder {
|
||
|
let id = r.match_info().query("item_id");
|
||
|
println!("{}", id);
|
||
|
|
||
|
let itemdb: &actix_web::web::Data<item::ItemDB> = r.app_data().unwrap();
|
||
|
|
||
|
let item = itemdb.get_item(id).unwrap();
|
||
|
|
||
|
let content = html!(
|
||
|
p { "Item" };
|
||
|
p { (format!("Category: {}", item.category))}
|
||
|
).into_string();
|
||
|
|
||
|
web_base::build_site(&r, "Item", &content)
|
||
|
}
|
||
|
|
||
|
#[get("/")]
|
||
|
pub(crate) async fn index(r: HttpRequest) -> impl Responder {
|
||
|
let itemdb: &actix_web::web::Data<item::ItemDB> = r.app_data().unwrap();
|
||
|
|
||
|
let content = html!(
|
||
|
p class="text-xl font-bold" { "Hello World" };
|
||
|
@for item in itemdb.items() {
|
||
|
a href=(format!("/item/{}", item)) { (item) };
|
||
|
}
|
||
|
)
|
||
|
.into_string();
|
||
|
web_base::func::build_site(&r, "Index", &content)
|
||
|
}
|
||
|
|
||
|
#[actix_web::main]
|
||
|
async fn main() -> std::io::Result<()> {
|
||
|
env_logger::init();
|
||
|
|
||
|
let itemdb = item::ItemDB::new("./itemdb", "mongodb://user:pass@mongodb:27017").await;
|
||
|
let itemdb = actix_web::web::Data::new(itemdb);
|
||
|
|
||
|
web_base::map!(
|
||
|
web_base::Site::new()
|
||
|
.head_content("<script src=\"https://cdn.tailwindcss.com\"></script>".to_string()),
|
||
|
|app: actix_web::App<_>| { app.app_data(itemdb.clone()).service(index).service(item_page) }
|
||
|
)
|
||
|
.bind(("0.0.0.0".to_string(), 8080))?
|
||
|
.run()
|
||
|
.await
|
||
|
}
|