Fix PR 3 review findings [skip ci]

This commit is contained in:
SCOPEDD committed 2026-09-29 23:21:14 -04:00
1 parent 590178e41a
commit 454620f21e
21 files changed
+522 -160

No files matched your search

+30 -9
View File
@@ -1,6 +1,6 @@
//! Friends, Direct Messages, Game Invites, Player Profiles, and Social Feed.
use crate::auth::AuthUser;
use crate::auth::{AuthUser, MaybeUser};
use crate::error::{AppError, AppResult};
use crate::state::AppState;
use axum::extract::{Path, Query, State};
@@ -456,6 +456,7 @@ pub async fn respond_game_invite(
// ---------------------------------------------------------------------------
pub async fn get_player_profile(
MaybeUser(viewer): MaybeUser,
Path(uuid): Path<String>,
State(state): State<AppState>,
) -> AppResult<Json<UserProfileView>> {
@@ -497,23 +498,27 @@ pub async fn get_player_profile(
.await?;
// Recent posts
let post_rows: Vec<(i64, String, String, String, Option<String>, i64, String)> = sqlx::query_as(
"SELECT id, user_uuid, author_name, content, image_url, likes_count, created_at
FROM user_posts WHERE user_uuid = ? ORDER BY id DESC LIMIT 10",
let post_rows: Vec<(i64, String, String, String, Option<String>, i64, bool, String)> = sqlx::query_as(
"SELECT p.id, p.user_uuid, p.author_name, p.content, p.image_url, p.likes_count,
EXISTS(SELECT 1 FROM user_post_likes l WHERE l.post_id = p.id AND l.user_uuid = ?),
p.created_at
FROM user_posts p WHERE p.user_uuid = ? ORDER BY p.id DESC LIMIT 10",
)
.bind(viewer.as_ref().map(|user| user.uuid.as_str()).unwrap_or(""))
.bind(&puuid)
.fetch_all(&state.db)
.await?;
let posts = post_rows
.into_iter()
.map(|(id, u_uuid, aname, content, img, likes, cat)| UserPost {
.map(|(id, u_uuid, aname, content, img, likes, liked_by_me, cat)| UserPost {
id,
user_uuid: u_uuid,
author_name: aname,
content,
image_url: img,
likes_count: likes,
liked_by_me,
created_at: cat,
})
.collect();
@@ -634,6 +639,7 @@ pub async fn create_user_post(
content: content.to_string(),
image_url: payload.image_url,
likes_count: 0,
liked_by_me: false,
created_at: now,
}))
}
@@ -653,16 +659,31 @@ pub async fn delete_user_post(
}
pub async fn like_user_post(
_auth: AuthUser,
auth: AuthUser,
Path(post_id): Path<i64>,
State(state): State<AppState>,
) -> AppResult<Json<Value>> {
sqlx::query("UPDATE user_posts SET likes_count = likes_count + 1 WHERE id = ?")
let mut tx = state.db.begin().await?;
let exists: bool = sqlx::query_scalar("SELECT EXISTS(SELECT 1 FROM user_posts WHERE id = ?)")
.bind(post_id)
.execute(&state.db)
.fetch_one(&mut *tx)
.await?;
if !exists { return Err(AppError::not_found("Post not found")); }
let added = sqlx::query("INSERT OR IGNORE INTO user_post_likes (post_id, user_uuid) VALUES (?, ?)")
.bind(post_id)
.bind(&auth.uuid)
.execute(&mut *tx)
.await?
.rows_affected() > 0;
if added {
sqlx::query("UPDATE user_posts SET likes_count = likes_count + 1 WHERE id = ?")
.bind(post_id)
.execute(&mut *tx)
.await?;
}
tx.commit().await?;
Ok(Json(serde_json::json!({ "ok": true })))
Ok(Json(serde_json::json!({ "ok": true, "liked": added })))
}
// ---------------------------------------------------------------------------