diff options
Diffstat (limited to 'src/routes/ui.rs')
| -rw-r--r-- | src/routes/ui.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/routes/ui.rs b/src/routes/ui.rs new file mode 100644 index 0000000..f70b6f1 --- /dev/null +++ b/src/routes/ui.rs @@ -0,0 +1,55 @@ +// Copyright (C) 2021-2021 Fuwn +// SPDX-License-Identifier: GPL-3.0-only + +use actix_web::{web, HttpResponse}; +use askama::Template; + +use crate::{db::find_link, structure::TextTemplate}; + +#[get("/")] +pub fn index() -> HttpResponse { + HttpResponse::Ok().body(include_str!("../../templates/index.html")) +} + +#[get("/{short}")] +pub async fn handle(info: web::Path<String>) -> HttpResponse { + let result = find_link(&info.0, true); + + if let Err(ref e) = result { + HttpResponse::Ok().body( + TextTemplate { + text: e.to_string().as_str(), + } + .render() + .unwrap(), + ) + } else { + HttpResponse::Ok().body(format!( + "<script>location.href=\"/{}\"</script>", + result.unwrap().long, + )) + } +} + +#[get("/{short}/statistics")] +pub async fn statistics(info: web::Path<String>) -> HttpResponse { + let result = find_link(&info.0, false); + + if let Err(ref e) = result { + HttpResponse::Ok().body( + TextTemplate { + text: e.to_string().as_str(), + } + .render() + .unwrap(), + ) + } else { + HttpResponse::Ok().body( + TextTemplate { + text: &format!("/{} has {} uses", info.0, result.unwrap().uses), + } + .render() + .unwrap(), + ) + } +} |