diff options
-rw-r--r-- | public/admin.html | 2 | ||||
-rw-r--r-- | public/js/home.js | 9 | ||||
-rw-r--r-- | src/api/posts.rs | 8 | ||||
-rw-r--r-- | src/database/posts.rs | 3 | ||||
-rw-r--r-- | src/types/post.rs | 27 |
5 files changed, 35 insertions, 14 deletions
diff --git a/public/admin.html b/public/admin.html index cb68302..342b78e 100644 --- a/public/admin.html +++ b/public/admin.html @@ -18,6 +18,8 @@ <link rel="stylesheet" href="/css/main.css"> <link rel="stylesheet" href="/css/header.css"> <link rel="stylesheet" href="/css/admin.css"> + + <script src="/js/admin.js" type="module"></script> </head> <body> <div id="header"> diff --git a/public/js/home.js b/public/js/home.js index 447f602..9f0398f 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -22,8 +22,13 @@ async function post() { comments: [] } data.posts.unshift(post) - let html = parsePost(post) - prepend(html, posts_block) + let html = parsePost(post, data.users, data.self) + + posts_block.insertBefore( + html, + posts_block.firstChild + ) + document.getElementById('popup').classList.add('hidden') } diff --git a/src/api/posts.rs b/src/api/posts.rs index ee590ec..57b2ca8 100644 --- a/src/api/posts.rs +++ b/src/api/posts.rs @@ -100,10 +100,10 @@ impl Check for PostPageRequest { } async fn page( - AuthorizedUser(_user): AuthorizedUser, + AuthorizedUser(user): AuthorizedUser, Json(body): Json<PostPageRequest>, ) -> Response { - let Ok(posts) = Post::from_post_page(body.page) else { + let Ok(posts) = Post::from_post_page(user.user_id, body.page) else { return ResponseCode::InternalServerError.text("Failed to fetch posts") }; @@ -196,10 +196,10 @@ impl Check for UsersPostsRequest { } async fn user( - AuthorizedUser(_user): AuthorizedUser, + AuthorizedUser(user): AuthorizedUser, Json(body): Json<UsersPostsRequest>, ) -> Response { - let Ok(posts) = Post::from_user_post_page(body.user_id, body.page) else { + let Ok(posts) = Post::from_user_post_page(user.user_id, 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 7da3bf0..c33e7e7 100644 --- a/src/database/posts.rs +++ b/src/database/posts.rs @@ -31,7 +31,6 @@ fn post_from_row(row: &Row) -> Result<Post, rusqlite::Error> { let comments = comments::get_comments_page(0, post_id).unwrap_or_else(|_| Vec::new()); let likes = likes::get_like_count(post_id).unwrap_or(None).unwrap_or(0); - let liked = likes::get_liked(user_id, post_id).unwrap_or(false); Ok(Post { post_id, @@ -39,7 +38,7 @@ fn post_from_row(row: &Row) -> Result<Post, rusqlite::Error> { content, date, likes, - liked, + liked: false, comments, }) } diff --git a/src/types/post.rs b/src/types/post.rs index a067512..09f2f50 100644 --- a/src/types/post.rs +++ b/src/types/post.rs @@ -28,27 +28,42 @@ impl fmt::Debug for Post { impl Post { #[instrument()] - pub fn from_post_id(post_id: u64) -> Result<Self> { - let Ok(Some(post)) = database::posts::get_post(post_id) else { + pub fn from_post_id(self_id: u64, post_id: u64) -> Result<Self> { + let Ok(Some(mut post)) = database::posts::get_post(post_id) else { return Err(ResponseCode::BadRequest.text("Post does not exist")) }; + let liked = database::likes::get_liked(self_id, post.post_id).unwrap_or(false); + post.liked = liked; + Ok(post) } #[instrument()] - pub fn from_post_page(page: u64) -> Result<Vec<Self>> { - let Ok(posts) = database::posts::get_post_page(page) else { + pub fn from_post_page(self_id: u64, page: u64) -> Result<Vec<Self>> { + let Ok(mut posts) = database::posts::get_post_page(page) else { return Err(ResponseCode::BadRequest.text("Failed to fetch posts")) }; + + for post in &mut posts { + let liked = database::likes::get_liked(self_id, post.post_id).unwrap_or(false); + post.liked = liked; + } + Ok(posts) } #[instrument()] - 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 { + pub fn from_user_post_page(self_id: u64, user_id: u64, page: u64) -> Result<Vec<Self>> { + let Ok(mut posts) = database::posts::get_users_post_page(user_id, page) else { return Err(ResponseCode::BadRequest.text("Failed to fetch posts")) }; + + for post in &mut posts { + let liked = database::likes::get_liked(self_id, post.post_id).unwrap_or(false); + post.liked = liked; + } + Ok(posts) } |