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