diff --git a/src/main.rs b/src/main.rs index 5ca5d1d..f95d7da 100644 --- a/src/main.rs +++ b/src/main.rs @@ -91,7 +91,8 @@ async fn main() -> Result<()> { .nest_service("/assets", ServeDir::new("assets")) .route("/", get(index)) .route("/feed/", get(get_list_feed).post(post_feed)) - .route("/feed/:id", get(get_feed).delete(delete_feed)) + .route("/feed/:id", get(get_feed).delete(delete_feed).put(put_feed)) + .route("/feedform/:id", get(get_feed_form)) .layer(middlewares) .with_state(context.clone()); // Run our app with hyper @@ -136,7 +137,42 @@ async fn get_feed( } } -#[derive(Deserialize)] +#[derive(Template)] +#[template(path="feed_form.html")] +struct FeedFormTemplate { + feed: RssFeed +} + +async fn get_feed_form( + State(ctx): State, + Path(feed_id): Path +) -> impl IntoResponse { + 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 { + FeedFormTemplate{ feed } + } else { + FeedFormTemplate{ + feed: RssFeed{ + id: -1, + name: "ERROR".to_string(), + feed_url: "ERROR".to_string(), + last_pub_date: Some("ERROR".to_string()) + } + } + } +} + +#[derive(Deserialize, AsChangeset)] +#[diesel(table_name = crate::schema::rss_feeds)] struct PostForm{ name: String, feed_url: String, @@ -162,6 +198,23 @@ async fn post_feed( res } +async fn put_feed( + State(ctx): State, + Path(feed_id): Path, + Form(post): Form +) -> impl IntoResponse { + let conn = ctx.pool.get().await.unwrap(); + use self::schema::rss_feeds::dsl::*; + let result = conn.interact(move |conn| { + diesel::update(rss_feeds.find(feed_id)) + .set(post) + .returning(RssFeed::as_select()) + .get_result(conn) + .expect("Error updating feed") + }).await.unwrap(); + FeedTemplate{ feed: result } +} + #[derive(Template)] #[template(source="\ diff --git a/templates/base.html b/templates/base.html index 6c08b8d..07a1fa8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -2,7 +2,6 @@ - {% block title %}{{ title }}{% endblock %} diff --git a/templates/feed.html b/templates/feed.html index 320c499..d37d32b 100644 --- a/templates/feed.html +++ b/templates/feed.html @@ -6,7 +6,12 @@ + + + + + \ No newline at end of file