add load time and page titles
All checks were successful
Create and publish a Docker image / build-and-push-image (push) Successful in 15m56s

This commit is contained in:
Nicholas Orlowsky 2025-09-21 21:25:04 -04:00
parent 8fd41b1090
commit 95bef54eed
No known key found for this signature in database
GPG key ID: A9F3BA4C0AA7A70B
6 changed files with 32 additions and 177 deletions

View file

@ -1,5 +1,5 @@
use actix_web::{get, web::{Data, self}, HttpResponse, Responder};
use std::{cmp::Ordering, sync::Arc};
use std::{cmp::Ordering, time::Instant, sync::Arc};
use libseptastic::{route::RouteType, stop_schedule::Trip};
use serde::{Serialize, Deserialize};
use askama::Template;
@ -9,6 +9,8 @@ use crate::database;
#[get("/routes")]
async fn get_routes_html(state: Data<Arc<AppState>>) -> impl Responder {
let start_time = Instant::now();
let mut all_routes = database::get_all_routes(&mut state.database.begin().await.unwrap()).await.unwrap();
all_routes.sort_by(|x, y| {
@ -21,15 +23,20 @@ async fn get_routes_html(state: Data<Arc<AppState>>) -> impl Responder {
return if y.id > x.id { Ordering::Less } else { Ordering::Greater };
});
let rr_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::RegionalRail).collect();
let subway_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::SubwayElevated).collect();
let trolley_routes = all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::Trolley).collect();
let bus_routes = all_routes.into_iter().filter(|x| x.route_type == RouteType::TracklessTrolley || x.route_type == RouteType::Bus).collect();
HttpResponse::Ok().body(crate::templates::ContentTemplate {
page_title: None,
page_desc: None,
page_title: Some(String::from("SEPTASTIC | Routes")),
page_desc: Some(String::from("All SEPTA routes.")),
content: crate::templates::RoutesTemplate {
rr_routes: all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::RegionalRail).collect(),
subway_routes: all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::SubwayElevated).collect(),
trolley_routes: all_routes.clone().into_iter().filter(|x| x.route_type == RouteType::Trolley).collect(),
bus_routes: all_routes.into_iter().filter(|x| x.route_type == RouteType::TracklessTrolley || x.route_type == RouteType::Bus).collect(),
}
rr_routes,
subway_routes,
trolley_routes,
bus_routes,
},
load_time_ms: Some(start_time.elapsed().as_millis())
}.render().unwrap())
}
@ -58,6 +65,7 @@ pub struct RouteResponse {
}
async fn get_route_info(route_id: String, state: Data<Arc<AppState>>) -> ::anyhow::Result<RouteResponse> {
let route = get_route_by_id(route_id.clone(), state.clone()).await?;
let directions = database::get_direction_by_route_id(route_id.clone(), &mut state.database.begin().await?).await?;
let mut trips = database::get_schedule_by_route_id(route_id.clone(), &mut state.database.begin().await?).await?;
@ -73,6 +81,8 @@ async fn get_route_info(route_id: String, state: Data<Arc<AppState>>) -> ::anyho
#[get("/route/{route_id}")]
async fn get_route(state: Data<Arc<AppState>>, info: web::Query<MyQueryParams>, path: web::Path<String>) -> impl Responder {
let start_time = Instant::now();
let mut filters: Option<Vec<i64>> = None;
if let Some (stops_v) = info.stops.clone() {
let mut items = Vec::new();
@ -84,17 +94,17 @@ async fn get_route(state: Data<Arc<AppState>>, info: web::Query<MyQueryParams>,
}
let route_id = path.into_inner();
let route_info_r = get_route_info(route_id, state).await;
let route_info_r = get_route_info(route_id.clone(), state).await;
if let Ok(route_info) = route_info_r {
HttpResponse::Ok().body(crate::templates::ContentTemplate {
page_title: None,
page_desc: None,
page_title: Some(format!("SEPTASTIC | Schedules for {}", route_id.clone())),
page_desc: Some(format!("Schedule information for {}", route_id.clone())),
content: crate::templates::RouteTemplate {
route: route_info.route,
directions: route_info.directions.clone(),
timetables: crate::templates::build_timetables(route_info.directions.as_slice(), route_info.schedule.as_slice()),
filter_stops: filters.clone()
}
},
load_time_ms: Some(start_time.elapsed().as_millis())
}.render().unwrap())
} else {
HttpResponse::InternalServerError().body("Error")