From 06ff916a31cef42b9bd8115f95f65782d15de3b7 Mon Sep 17 00:00:00 2001 From: nightbug-xx Date: Tue, 10 Jun 2025 10:11:43 +0900 Subject: [PATCH] Include user emails in friend request listings --- app/schemas/friend.py | 2 ++ app/services/friend_service.py | 53 ++++++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/app/schemas/friend.py b/app/schemas/friend.py index 59b90b7..e37e150 100644 --- a/app/schemas/friend.py +++ b/app/schemas/friend.py @@ -18,6 +18,8 @@ class FriendRequestResponse(BaseModel): id: int from_user_id: int to_user_id: int + from_user_email: str | None = None + to_user_email: str | None = None status: FriendRequestStatus created_at: datetime updated_at: datetime diff --git a/app/services/friend_service.py b/app/services/friend_service.py index 466c663..b1adda6 100644 --- a/app/services/friend_service.py +++ b/app/services/friend_service.py @@ -1,4 +1,5 @@ -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, aliased +from sqlalchemy import select from app.models.friend import FriendRequest, Friend, FriendRequestStatus from app.models.user import User from app.models.character import Character, CharacterHomework @@ -44,17 +45,51 @@ def send_friend_request(db: Session, from_user_id: int, to_user_email: str): def get_received_requests(db: Session, user_id: int): - return db.query(FriendRequest).filter( - FriendRequest.to_user_id == user_id, - FriendRequest.status == FriendRequestStatus.pending - ).all() + sender = aliased(User) + receiver = aliased(User) + stmt = ( + select( + FriendRequest.id, + FriendRequest.from_user_id, + FriendRequest.to_user_id, + sender.email.label("from_user_email"), + receiver.email.label("to_user_email"), + FriendRequest.status, + FriendRequest.created_at, + FriendRequest.updated_at, + ) + .join(sender, FriendRequest.from_user_id == sender.id) + .join(receiver, FriendRequest.to_user_id == receiver.id) + .where( + FriendRequest.to_user_id == user_id, + FriendRequest.status == FriendRequestStatus.pending, + ) + ) + return db.execute(stmt).mappings().all() def get_sent_requests(db: Session, user_id: int): - return db.query(FriendRequest).filter( - FriendRequest.from_user_id == user_id, - FriendRequest.status == FriendRequestStatus.pending - ).all() + sender = aliased(User) + receiver = aliased(User) + stmt = ( + select( + FriendRequest.id, + FriendRequest.from_user_id, + FriendRequest.to_user_id, + sender.email.label("from_user_email"), + receiver.email.label("to_user_email"), + FriendRequest.status, + FriendRequest.created_at, + FriendRequest.updated_at, + ) + .join(sender, FriendRequest.from_user_id == sender.id) + .join(receiver, FriendRequest.to_user_id == receiver.id) + .where( + FriendRequest.from_user_id == user_id, + FriendRequest.status == FriendRequestStatus.pending, + ) + ) + return db.execute(stmt).mappings().all() def cancel_sent_request(db: Session, request_id: int, user_id: int):