diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2023-02-02 11:29:37 -0500 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2023-02-02 11:29:37 -0500 |
commit | 18a27f62befb0c0d2e3b175f08f6088f10b25063 (patch) | |
tree | 1d8c0d00685f9374fdb3705062c08265d7e1fdb0 /src | |
parent | add caching header (diff) | |
download | xssbook-18a27f62befb0c0d2e3b175f08f6088f10b25063.tar.gz xssbook-18a27f62befb0c0d2e3b175f08f6088f10b25063.tar.bz2 xssbook-18a27f62befb0c0d2e3b175f08f6088f10b25063.zip |
loading by offset on profile
Diffstat (limited to '')
-rw-r--r-- | src/api/mod.rs | 2 | ||||
-rw-r--r-- | src/api/posts.rs | 3 | ||||
-rw-r--r-- | src/database/posts.rs | 7 | ||||
-rw-r--r-- | src/public/mod.rs | 2 | ||||
-rw-r--r-- | src/types/post.rs | 4 |
5 files changed, 10 insertions, 8 deletions
diff --git a/src/api/mod.rs b/src/api/mod.rs index 9efcefc..925aa4a 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -16,7 +16,7 @@ pub use auth::RegistrationRequet; pub fn router() -> Router { let governor_conf = Box::new( GovernorConfigBuilder::default() - .burst_size(10) + .burst_size(1000) .per_second(1) .key_extractor(SmartIpKeyExtractor) .finish() diff --git a/src/api/posts.rs b/src/api/posts.rs index 3a2e507..d85fb98 100644 --- a/src/api/posts.rs +++ b/src/api/posts.rs @@ -72,6 +72,7 @@ async fn page( #[derive(Deserialize)] struct UsersPostsRequest { user_id: u64, + page: u64 } impl Check for UsersPostsRequest { @@ -84,7 +85,7 @@ async fn user( AuthorizedUser(_user): AuthorizedUser, Json(body): Json<UsersPostsRequest>, ) -> Response { - let Ok(posts) = Post::from_user_id(body.user_id) else { + let Ok(posts) = Post::from_user_post_page(body.user_id, body.page) else { return ResponseCode::InternalServerError.text("Failed to fetch posts") }; diff --git a/src/database/posts.rs b/src/database/posts.rs index 6c0a27e..a81d6a7 100644 --- a/src/database/posts.rs +++ b/src/database/posts.rs @@ -90,11 +90,12 @@ pub fn get_all_posts() -> Result<Vec<Post>, rusqlite::Error> { } #[instrument()] -pub fn get_users_posts(user_id: u64) -> Result<Vec<Post>, rusqlite::Error> { +pub fn get_users_post_page(user_id: u64, page: u64) -> Result<Vec<Post>, rusqlite::Error> { tracing::trace!("Retrieving users posts"); + let page_size = 10; let conn = database::connect()?; - let mut stmt = conn.prepare("SELECT * FROM posts WHERE user_id = ? ORDER BY post_id DESC")?; - let row = stmt.query_map([user_id], |row| { + let mut stmt = conn.prepare("SELECT * FROM posts WHERE user_id = ? ORDER BY post_id DESC LIMIT ? OFFSET ?")?; + let row = stmt.query_map([user_id, page_size, page_size * page], |row| { let row = post_from_row(row)?; Ok(row) })?; diff --git a/src/public/mod.rs b/src/public/mod.rs index eb846fb..7e5b382 100644 --- a/src/public/mod.rs +++ b/src/public/mod.rs @@ -24,7 +24,7 @@ pub mod pages; pub fn router() -> Router { let governor_conf = Box::new( GovernorConfigBuilder::default() - .burst_size(20) + .burst_size(20000) .per_second(1) .key_extractor(SmartIpKeyExtractor) .finish() diff --git a/src/types/post.rs b/src/types/post.rs index 7397009..ea7cbbf 100644 --- a/src/types/post.rs +++ b/src/types/post.rs @@ -43,8 +43,8 @@ impl Post { } #[instrument()] - pub fn from_user_id(user_id: u64) -> Result<Vec<Self>> { - let Ok(posts) = database::posts::get_users_posts(user_id) else { + pub fn from_user_post_page(user_id: u64, page: u64) -> Result<Vec<Self>> { + let Ok(posts) = database::posts::get_users_post_page(user_id, page) else { return Err(ResponseCode::BadRequest.text("Failed to fetch posts")) }; Ok(posts) |