From 3d3b08caf1823938b6b41c7930167c9bc4abce29 Mon Sep 17 00:00:00 2001 From: Thomas Gideon Date: Sat, 7 Sep 2024 13:18:23 -0400 Subject: [PATCH] Start roughing in series management - Set up asset struct for rust-embed. Create SQL assets. - Write convenience for loading SQL assets. - Rough out view series route. - Rough out and wire up add series route. --- sql/insert_series.sql | 1 + sql/select_series.sql | 1 + src/app/home.rs | 6 +++++- src/app/series/add.rs | 35 ++++++++++++++++++++++++++++++++++- src/app/series/mod.rs | 11 +++++++++-- src/db.rs | 16 ++++++++++++++++ src/lib.rs | 2 ++ 7 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 sql/insert_series.sql create mode 100644 sql/select_series.sql create mode 100644 src/db.rs diff --git a/sql/insert_series.sql b/sql/insert_series.sql new file mode 100644 index 0000000..233d2d7 --- /dev/null +++ b/sql/insert_series.sql @@ -0,0 +1 @@ +insert into series (name) values ($1); diff --git a/sql/select_series.sql b/sql/select_series.sql new file mode 100644 index 0000000..cac4c73 --- /dev/null +++ b/sql/select_series.sql @@ -0,0 +1 @@ +select * from series; diff --git a/src/app/home.rs b/src/app/home.rs index 7b1b65a..a400b79 100644 --- a/src/app/home.rs +++ b/src/app/home.rs @@ -1,9 +1,13 @@ -use super::series::SeriesList; +use super::series::{add::AddSeries, SeriesList}; use leptos::*; use leptos_router::*; #[component] pub fn HomePage() -> impl IntoView { + let add_series = create_server_action::(); + + provide_context(add_series); + view! {

"What We're Watching"

diff --git a/src/app/series/add.rs b/src/app/series/add.rs index a25a28e..ada0ada 100644 --- a/src/app/series/add.rs +++ b/src/app/series/add.rs @@ -1,15 +1,48 @@ use leptos::*; +use leptos_router::*; #[component] pub fn AddSeries() -> impl IntoView { + let add_series = expect_context::>>(); view! {

Add Series

- To Do + +
+ +
+
+ +
+
} } + +#[server(AddSeries)] +pub async fn add_series(name: String) -> Result<(), ServerFnError> { + use crate::db::load_statement; + use sqlx::{Pool, Postgres}; + let pool = expect_context::>(); + + let s = load_statement("insert_series.sql"); + sqlx::query(&s) + .persistent(true) + .bind(name) + .execute(&pool) + .await?; + + leptos_axum::redirect("/"); + + Ok(()) +} diff --git a/src/app/series/mod.rs b/src/app/series/mod.rs index 60015b2..91703a6 100644 --- a/src/app/series/mod.rs +++ b/src/app/series/mod.rs @@ -1,3 +1,4 @@ +use self::add::AddSeries; use leptos::*; use leptos_router::*; use serde::{Deserialize, Serialize}; @@ -10,7 +11,11 @@ pub mod view; #[component] pub fn SeriesList() -> impl IntoView { - let load = create_resource(|| (), |_| async move { get_all().await }); + let add_user = expect_context::>>(); + let load = create_resource( + move || add_user.version().get(), + |_| async move { get_all().await }, + ); view! { "Loading..."
}>