Include user emails in friend request listings

This commit is contained in:
nightbug-xx 2025-06-10 10:11:43 +09:00
parent f7ac481314
commit 06ff916a31
2 changed files with 46 additions and 9 deletions

View File

@ -18,6 +18,8 @@ class FriendRequestResponse(BaseModel):
id: int id: int
from_user_id: int from_user_id: int
to_user_id: int to_user_id: int
from_user_email: str | None = None
to_user_email: str | None = None
status: FriendRequestStatus status: FriendRequestStatus
created_at: datetime created_at: datetime
updated_at: datetime updated_at: datetime

View File

@ -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.friend import FriendRequest, Friend, FriendRequestStatus
from app.models.user import User from app.models.user import User
from app.models.character import Character, CharacterHomework 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): def get_received_requests(db: Session, user_id: int):
return db.query(FriendRequest).filter( sender = aliased(User)
FriendRequest.to_user_id == user_id, receiver = aliased(User)
FriendRequest.status == FriendRequestStatus.pending stmt = (
).all() 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): def get_sent_requests(db: Session, user_id: int):
return db.query(FriendRequest).filter( sender = aliased(User)
FriendRequest.from_user_id == user_id, receiver = aliased(User)
FriendRequest.status == FriendRequestStatus.pending stmt = (
).all() 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): def cancel_sent_request(db: Session, request_id: int, user_id: int):