Table basics with some HTMX to allow data refresh
This commit is contained in:
66
src/main.rs
66
src/main.rs
@@ -17,6 +17,7 @@ use tower::{ServiceBuilder};
|
||||
use tower_http::{
|
||||
cors::{Any, CorsLayer},
|
||||
trace::{TraceLayer, DefaultOnResponse},
|
||||
services::ServeDir,
|
||||
LatencyUnit
|
||||
};
|
||||
use tracing::{
|
||||
@@ -96,7 +97,9 @@ async fn main() -> Result<()> {
|
||||
.layer(tracelayer).layer(cors);
|
||||
// Launch Web Server
|
||||
let app = Router::new()
|
||||
.nest_service("/assets", ServeDir::new("assets"))
|
||||
.route("/", get(index))
|
||||
.route("/feed/:id/", get(get_feed))
|
||||
.layer(middlewares)
|
||||
.with_state(context.clone());
|
||||
// Run our app with hyper
|
||||
@@ -104,32 +107,59 @@ async fn main() -> Result<()> {
|
||||
.await.context(format!("Failed to bind Web Service on {}:{}", config.http_host, config.http_port))?;
|
||||
info!("Listening on {}:{}", config.http_host, config.http_port);
|
||||
axum::serve(listener, app).await.context("Failed to serve Web Service")?;
|
||||
// let connection = &mut establish_connection();
|
||||
// use self::schema::rss_feeds::dsl::*;
|
||||
// let results = rss_feeds
|
||||
// .limit(5)
|
||||
// .select(RssFeed::as_select())
|
||||
// .load(connection)
|
||||
// .expect("Error loading posts");
|
||||
//
|
||||
// println!("Displaying {} posts", results.len());
|
||||
// for rss_feed in results {
|
||||
// println!("{}", rss_feed.name);
|
||||
// println!("-----------\n");
|
||||
// println!("{}", rss_feed.feed_url);
|
||||
// }
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path="feed.html")]
|
||||
struct FeedTemplate {
|
||||
feed: RssFeed
|
||||
}
|
||||
|
||||
async fn get_feed(
|
||||
State(ctx): State<AppContext>,
|
||||
Path(feed_id): Path<i32>
|
||||
) -> FeedTemplate {
|
||||
let conn = ctx.pool.get().await.unwrap();
|
||||
use self::schema::rss_feeds::dsl::*;
|
||||
let result = conn.interact(move |conn| {
|
||||
rss_feeds
|
||||
.find(feed_id)
|
||||
.select(RssFeed::as_select())
|
||||
.first(conn)
|
||||
.optional()
|
||||
.expect("Error loading feeds")
|
||||
}).await.unwrap();
|
||||
if let Some(feed) = result {
|
||||
FeedTemplate{ feed }
|
||||
} else {
|
||||
FeedTemplate{
|
||||
feed: RssFeed{
|
||||
id: -1,
|
||||
name: "ERROR".to_string(),
|
||||
feed_url: "ERROR".to_string(),
|
||||
last_pub_date: Some("ERROR".to_string())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "index.html")]
|
||||
struct HelloTemplate<'a> {
|
||||
name: &'a str,
|
||||
struct IndexTemplate {
|
||||
feeds: Vec<RssFeed>,
|
||||
}
|
||||
|
||||
async fn index(
|
||||
State(ctx): State<AppContext>,
|
||||
) -> HelloTemplate<'static> {
|
||||
HelloTemplate { name: "world" }
|
||||
) -> IndexTemplate {
|
||||
let conn = ctx.pool.get().await.unwrap();
|
||||
use self::schema::rss_feeds::dsl::*;
|
||||
let result = conn.interact(|conn| {
|
||||
rss_feeds
|
||||
.select(RssFeed::as_select())
|
||||
.load(conn)
|
||||
.expect("Error loading feeds")
|
||||
}).await.unwrap();
|
||||
IndexTemplate { feeds: result }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user