1
1
from sqlalchemy .orm import Session
2
- from models .discussion import Discussion
2
+ from models .discussion import Discussion , DiscussionLike
3
3
from schemas .discussion import DiscussionCreate , DiscussionLikeResponse
4
4
from typing import List
5
5
@@ -19,20 +19,32 @@ def get_discussions_by_question(db: Session, question_id: int):
19
19
20
20
# 토론 좋아요 추가
21
21
def add_like_to_discussion (db : Session , discussion_id : int , user_id : int ):
22
- discussion = discussion = db .query (Discussion ).filter (Discussion .discussion_id == discussion_id ).first ()
23
- # 좋아요 토글: 좋아요가 1 이상이면 취소, 0이면 추가
24
- if discussion .like > 0 :
25
- discussion .like -= 1 # 좋아요 취소
22
+ discussion = db .query (Discussion ).filter (Discussion .discussion_id == discussion_id ).first ()
23
+
24
+ # 사용자가 이미 좋아요를 눌렀는지 확인
25
+ existing_like = db .query (DiscussionLike ).filter (
26
+ DiscussionLike .discussion_id == discussion_id ,
27
+ DiscussionLike .user_id == user_id
28
+ ).first ()
29
+
30
+ if existing_like :
31
+ # 이미 눌렀다면 삭제 (좋아요 취소)
32
+ db .delete (existing_like )
33
+ discussion .like -= 1
26
34
liked = False
27
35
else :
28
- discussion .like += 1 # 좋아요 추가
36
+ # 좋아요 추가
37
+ new_like = DiscussionLike (discussion_id = discussion_id , user_id = user_id )
38
+ db .add (new_like )
39
+ discussion .like += 1
29
40
liked = True
30
41
31
42
db .commit ()
32
43
db .refresh (discussion )
33
44
34
- return {"discussion_id" : discussion_id , "like" : discussion .like , "liked" : liked }
45
+ return {"discussion_id" : discussion_id , "like" : discussion .like , "liked" : liked }
35
46
36
47
# 좋아요 누른 토론 조회
37
48
def get_liked_discussions_by_user (db : Session , user_id : int ) -> List [Discussion ]:
38
- return db .query (Discussion ).filter (Discussion .user_id == user_id , Discussion .like > 0 ).all ()
49
+ return db .query (Discussion ).join (DiscussionLike , Discussion .discussion_id == DiscussionLike .discussion_id )\
50
+ .filter (DiscussionLike .user_id == user_id ).all ()
0 commit comments