feat: include friend emails in list
This commit is contained in:
parent
f7ac481314
commit
116716f4dc
@ -1,7 +1,12 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from app.core.deps import get_db, get_current_user
|
||||
from app.schemas.friend import FriendRequestCreate, FriendRequestResponse, FriendResponse
|
||||
from app.schemas.friend import (
|
||||
FriendRequestCreate,
|
||||
FriendRequestResponse,
|
||||
FriendResponse,
|
||||
FriendListItem,
|
||||
)
|
||||
from app.schemas.character import CharacterResponse
|
||||
from app.services import friend_service
|
||||
from app.models.user import User
|
||||
@ -55,7 +60,7 @@ def respond_to_request(
|
||||
return {"detail": "요청을 처리했습니다."}
|
||||
|
||||
|
||||
@router.get("/list", response_model=list[int])
|
||||
@router.get("/list", response_model=list[FriendListItem])
|
||||
def get_friend_list(
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user)
|
||||
|
||||
@ -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
|
||||
@ -34,3 +36,11 @@ class FriendResponse(BaseModel):
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class FriendListItem(BaseModel):
|
||||
id: int
|
||||
email: str
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
@ -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):
|
||||
@ -104,7 +139,9 @@ def get_friend_list(db: Session, user_id: int):
|
||||
result = []
|
||||
for f in friends:
|
||||
friend_id = f.user_id_2 if f.user_id_1 == user_id else f.user_id_1
|
||||
result.append(friend_id)
|
||||
friend = db.query(User).filter(User.id == friend_id).first()
|
||||
friend_email = friend.email if friend else None
|
||||
result.append({"id": friend_id, "email": friend_email})
|
||||
|
||||
return result
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user