add templates for reports

This commit is contained in:
Mitchell Marino
2023-04-13 23:05:03 -05:00
parent 8835413257
commit ebc86c268d
4 changed files with 107 additions and 18 deletions
+58 -18
View File
@@ -1,3 +1,8 @@
use crate::{
jwt::handle_token,
models::{ReportQuery, Role, UserReportEntry},
AppState,
};
use axum::{
extract::{Query, State},
http::StatusCode,
@@ -5,14 +10,27 @@ use axum::{
Json,
};
use axum_auth::AuthBearer;
use lazy_static::lazy_static;
use serde_json::json;
use sqlx::query_as;
use crate::{
jwt::handle_token,
models::{ReportQuery, Role, UserReportEntry},
AppState,
use sqlx::{
query_as,
types::chrono::{DateTime, Local, NaiveDate},
};
use tera::{Context, Tera};
lazy_static! {
pub static ref TEMPLATES: Tera = {
let mut tera = match Tera::new("templates/**/*") {
Ok(t) => t,
Err(e) => {
eprintln!("Parsing error(s): {}", e);
::std::process::exit(1);
}
};
tera.autoescape_on(vec![".html", ".sql"]);
tera
};
}
pub async fn get_report(
AuthBearer(token): AuthBearer,
@@ -20,8 +38,8 @@ pub async fn get_report(
Query(report_query): Query<ReportQuery>,
) -> impl IntoResponse {
let token_data = match handle_token(token, &app_state, Role::Teacher) {
Ok(value) => value,
Err(value) => return value,
Ok(token_data) => token_data,
Err(err) => return err,
};
let result = query_as!(
@@ -46,14 +64,36 @@ pub async fn get_report(
.fetch_all(&app_state.db_pool)
.await;
match result {
Ok(record) => (StatusCode::OK, Json(json!({ "data": record }))).into_response(),
Err(err) => (
StatusCode::BAD_REQUEST,
Json(json!({
"error": format!("Unknown error creating event: {}", err)
})),
)
.into_response(),
}
let records = match result {
Ok(records) => records,
Err(err) => {
return (
StatusCode::BAD_REQUEST,
Json(json!({
"error": format!("Unknown error creating event: {}", err)
})),
)
.into_response()
}
};
// render report
let mut context = Context::new();
context.insert("grade", &report_query.grade);
context.insert("date", &Local::now().format("%Y-%m-%d").to_string());
context.insert("users", &records);
let report = match TEMPLATES.render("report.html", &context) {
Ok(report) => report,
Err(err) => {
return (
StatusCode::BAD_REQUEST,
Json(json!({
"error": format!("Unknown error creating event: {}", err)
})),
)
.into_response()
}
};
todo!()
}