From 1e5f58e7f1c311743f6835f3605b25b89d6e4a3f Mon Sep 17 00:00:00 2001 From: azomDev Date: Sat, 3 Jan 2026 17:54:35 -0500 Subject: [PATCH] made the friend request api symmetrical --- app/src/utils/api.ts | 8 ++----- server/src/handlers.rs | 48 ++++++++++++++++++------------------------ server/src/main.rs | 3 +-- 3 files changed, 23 insertions(+), 36 deletions(-) diff --git a/app/src/utils/api.ts b/app/src/utils/api.ts index 8313598..b8717e3 100644 --- a/app/src/utils/api.ts +++ b/app/src/utils/api.ts @@ -36,12 +36,8 @@ export async function generateSignupKey(): Promise { return await post("generate-signup-key"); } -export async function createFriendRequest(friend_id: string): Promise { - await post("create-friend-request", friend_id); -} - -export async function acceptFriendRequest(friend_id: string): Promise { - await post("accept-friend-request", friend_id); +export async function requestFriendRequest(friend_id: string): Promise { + await post("request-friend-request", friend_id); } export async function isFriendRequestAccepted(friend_id: string): Promise { diff --git a/server/src/handlers.rs b/server/src/handlers.rs index 50168de..f725d4d 100644 --- a/server/src/handlers.rs +++ b/server/src/handlers.rs @@ -58,44 +58,36 @@ pub async fn generate_signup_key(State(state): State) -> Result, Extension(user_id): Extension, - accepter_id: String, + friend_id: String, ) -> Result<(), SrvErr> { - if accepter_id == user_id { + if friend_id == user_id { ReqBail!("Cannot friend yourself"); } let mut friend_requests = state.friend_requests.lock().await; - let link = Link::new(accepter_id, user_id); - if friend_requests.contains(&link) { - ReqBail!("Friend request already exists"); - } - friend_requests.insert(link); - return Ok(()); -} - -pub async fn accept_friend_request( - State(state): State, - Extension(user_id): Extension, - sender_id: String, -) -> Result<(), SrvErr> { - let link = Link::new(user_id, sender_id); - - let friend_request_accepted = { state.friend_requests.lock().await.remove(&link) }; + let link = Link::new(friend_id, user_id); - if !friend_request_accepted { - ReqBail!("Friend request not found"); + // if we remove sucessfully the link, it means a request already existed + // so we are making the friendship official + let friend_request_accepted = friend_requests.remove(&link); + if friend_request_accepted { + drop(friend_requests); + + let mut pings_state = state.positions.lock().await; + pings_state.insert(link.clone(), RingBuffer::new(state.ring_buffer_cap)); + drop(pings_state); + + let mut links = state.links.lock().await; + links.insert(link); + drop(links); + } else { + friend_requests.insert(link); + drop(friend_requests); } - let mut pings_state = state.positions.lock().await; - pings_state.insert(link.clone(), RingBuffer::new(state.ring_buffer_cap)); - drop(pings_state); - - let mut links = state.links.lock().await; - links.insert(link); - return Ok(()); } diff --git a/server/src/main.rs b/server/src/main.rs index 5103309..48dad22 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -50,8 +50,7 @@ async fn main() { .route("/", post(|| async { "You just sent a POST to /" })) // for testing .route("/create-account", post(create_user)) .route("/generate-signup-key", post(generate_signup_key)) - .route("/create-friend-request", post(create_friend_request)) - .route("/accept-friend-request", post(accept_friend_request)) + .route("/request-friend-request", post(request_friend_request)) .route( "/is-friend-request-accepted", post(is_friend_request_accepted), -- 2.51.2