feat: got sqlx working with axum and leptos

This commit is contained in:
Andrew Rioux
2025-01-24 15:31:10 -05:00
parent 8695685eb3
commit 814125d462
7 changed files with 72 additions and 10 deletions
+60 -1
View File
@@ -1,8 +1,67 @@
use leptos::prelude::*;
use serde::{Serialize, Deserialize};
#[cfg(feature = "ssr")]
use {
sqlx::SqlitePool
};
#[derive(Clone, Serialize, Deserialize)]
pub struct PubUser {
user_id: i64,
user_name: String
}
#[server]
async fn list_users() -> Result<Vec<PubUser>, ServerFnError> {
use leptos::server_fn::error::NoCustomError;
let pool = expect_context::<SqlitePool>();
let users = sqlx::query_as!(
PubUser,
"SELECT user_id, user_name FROM users"
)
.fetch_all(&pool)
.await?;
Ok(users)
}
#[component]
pub fn UserView() -> impl IntoView {
let user_list = Resource::new(|| (), |_| async move { list_users().await });
view! {
<p>"User view"</p>
<h1>"User list"</h1>
<Suspense
fallback=move || view! { <p>"Loading..."</p> }
>
<ErrorBoundary
fallback=|errors| view! {
<p>"Errors loading users!"</p>
<ul>
{move || errors.get()
.into_iter()
.map(|(_, e)| view! { <li>{e.to_string()}</li> })
.collect::<Vec<_>>()}
</ul>
}
>
{move || Suspend::new(async move {
let users_res = user_list.await;
users_res.map(|users| view! {
<ul>
{users
.into_iter()
.map(|user| view! {
<li>{user.user_id}": "{user.user_name}</li>
})
.collect::<Vec<_>>()}
</ul>
})
})}
</ErrorBoundary>
</Suspense>
}
}