From 66e9be195c397d791817df35378aed704816907e Mon Sep 17 00:00:00 2001 From: Sam Samai Date: Fri, 10 Sep 2021 21:24:22 +1000 Subject: [PATCH 1/5] Add pagination to the rocket example --- examples/rocket_example/src/main.rs | 18 +++++++++++------- .../rocket_example/templates/index.html.tera | 13 +++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/examples/rocket_example/src/main.rs b/examples/rocket_example/src/main.rs index 07ec3939..48b4aa0e 100644 --- a/examples/rocket_example/src/main.rs +++ b/examples/rocket_example/src/main.rs @@ -11,7 +11,6 @@ use rocket_db_pools::{sqlx, Connection, Database}; use rocket_dyn_templates::{context, Template}; use sea_orm::entity::*; -use sea_orm::query::*; mod pool; use pool::RocketDbPool; @@ -71,11 +70,14 @@ async fn update(conn: Connection, id: i32, post_form: Form) -> Flash::success(Redirect::to("/"), "Post successfully edited.") } -#[get("/")] -async fn list(conn: Connection, flash: Option>) -> Template { - let posts = Post::find() - .order_by_asc(post::Column::Id) - .all(&conn) +#[get("/?")] +async fn list(conn: Connection, page: Option, flash: Option>) -> Template { + let page = page.unwrap_or(0); + let paginator = Post::find() + .paginate(&conn, 4); + let num_pages = paginator.num_pages().await.ok().unwrap(); + + let posts = paginator.fetch_page(page) .await .expect("could not retrieve posts"); @@ -86,6 +88,8 @@ async fn list(conn: Connection, flash: Option>) -> Template context! { posts: posts, flash: flash, + page: page, + num_pages: num_pages }, ) } @@ -138,7 +142,7 @@ pub fn not_found(req: &Request<'_>) -> Template { async fn run_migrations(rocket: Rocket) -> fairing::Result { let db_url = Db::fetch(&rocket).unwrap().db_url.clone(); let conn = sea_orm::Database::connect(&db_url).await.unwrap(); - setup::create_post_table(&conn).await; + let _ = setup::create_post_table(&conn).await; Ok(rocket) } diff --git a/examples/rocket_example/templates/index.html.tera b/examples/rocket_example/templates/index.html.tera index 621f18b8..0dc60fb9 100644 --- a/examples/rocket_example/templates/index.html.tera +++ b/examples/rocket_example/templates/index.html.tera @@ -22,6 +22,19 @@ {% endfor %} + + + + + {% if page == 0 %} Previous {% else %} + Previous + {% endif %} | {% if page == num_pages - 1 %} Next {% else %} + Next + {% endif %} + + + +
From 81c1bf0704be34c1383eb9be1e7e16658a1c4bc8 Mon Sep 17 00:00:00 2001 From: Sam Samai Date: Fri, 10 Sep 2021 21:32:26 +1000 Subject: [PATCH 2/5] ROWS_PER_PAGE const --- examples/rocket_example/src/main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/rocket_example/src/main.rs b/examples/rocket_example/src/main.rs index 48b4aa0e..e4ae6e5c 100644 --- a/examples/rocket_example/src/main.rs +++ b/examples/rocket_example/src/main.rs @@ -26,6 +26,8 @@ type Result> = std::result::Result Template { Template::render("new", &Context::default()) @@ -74,7 +76,7 @@ async fn update(conn: Connection, id: i32, post_form: Form) -> async fn list(conn: Connection, page: Option, flash: Option>) -> Template { let page = page.unwrap_or(0); let paginator = Post::find() - .paginate(&conn, 4); + .paginate(&conn, ROWS_PER_PAGE); let num_pages = paginator.num_pages().await.ok().unwrap(); let posts = paginator.fetch_page(page) From f96c8ed49b18bdfb2f115255333c3bae05f5dbb5 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Fri, 10 Sep 2021 22:02:35 +0800 Subject: [PATCH 3/5] cargo fmt --- examples/rocket_example/src/main.rs | 14 +++++++++----- src/query/helper.rs | 4 +++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/examples/rocket_example/src/main.rs b/examples/rocket_example/src/main.rs index e4ae6e5c..beef7cd8 100644 --- a/examples/rocket_example/src/main.rs +++ b/examples/rocket_example/src/main.rs @@ -73,13 +73,17 @@ async fn update(conn: Connection, id: i32, post_form: Form) -> } #[get("/?")] -async fn list(conn: Connection, page: Option, flash: Option>) -> Template { +async fn list( + conn: Connection, + page: Option, + flash: Option>, +) -> Template { let page = page.unwrap_or(0); - let paginator = Post::find() - .paginate(&conn, ROWS_PER_PAGE); + let paginator = Post::find().paginate(&conn, ROWS_PER_PAGE); let num_pages = paginator.num_pages().await.ok().unwrap(); - let posts = paginator.fetch_page(page) + let posts = paginator + .fetch_page(page) .await .expect("could not retrieve posts"); @@ -91,7 +95,7 @@ async fn list(conn: Connection, page: Option, flash: Option Date: Sat, 11 Sep 2021 16:14:25 +1000 Subject: [PATCH 4/5] Add optional posts_per_page query string --- examples/rocket_example/src/main.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/rocket_example/src/main.rs b/examples/rocket_example/src/main.rs index beef7cd8..d1f23244 100644 --- a/examples/rocket_example/src/main.rs +++ b/examples/rocket_example/src/main.rs @@ -26,7 +26,7 @@ type Result> = std::result::Result Template { @@ -72,14 +72,16 @@ async fn update(conn: Connection, id: i32, post_form: Form) -> Flash::success(Redirect::to("/"), "Post successfully edited.") } -#[get("/?")] +#[get("/?&")] async fn list( conn: Connection, + posts_per_page: Option, page: Option, flash: Option>, ) -> Template { let page = page.unwrap_or(0); - let paginator = Post::find().paginate(&conn, ROWS_PER_PAGE); + let posts_per_page = posts_per_page.unwrap_or(DEFAULT_POSTS_PER_PAGE); + let paginator = Post::find().paginate(&conn, posts_per_page); let num_pages = paginator.num_pages().await.ok().unwrap(); let posts = paginator From 236bc56f03963e67e7f8f86cc50980fca4af245f Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Sat, 11 Sep 2021 15:45:05 +0800 Subject: [PATCH 5/5] Persist posts_per_page across pages --- examples/rocket_example/src/main.rs | 3 ++- examples/rocket_example/templates/index.html.tera | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/rocket_example/src/main.rs b/examples/rocket_example/src/main.rs index d1f23244..1a275200 100644 --- a/examples/rocket_example/src/main.rs +++ b/examples/rocket_example/src/main.rs @@ -26,7 +26,7 @@ type Result> = std::result::Result Template { @@ -97,6 +97,7 @@ async fn list( posts: posts, flash: flash, page: page, + posts_per_page: posts_per_page, num_pages: num_pages, }, ) diff --git a/examples/rocket_example/templates/index.html.tera b/examples/rocket_example/templates/index.html.tera index 0dc60fb9..0cba1b7d 100644 --- a/examples/rocket_example/templates/index.html.tera +++ b/examples/rocket_example/templates/index.html.tera @@ -27,9 +27,9 @@ {% if page == 0 %} Previous {% else %} - Previous + Previous {% endif %} | {% if page == num_pages - 1 %} Next {% else %} - Next + Next {% endif %}