어제 작성한 좋아요 등록 기능에 이어 오늘은 최종적으로 맡은 역할에 대한 API 구현을 끝내 보고자 노력해보았다.
남은 API 기능 구현으로는 좋아요 삭제 기능만 남아있었기 때문에 삭제 기능 테스트를 위한 DB 데이터를 만들어 두었다.

그리고 좋아요 삭제 기능 API 코드를 작성해주었다.
# like/views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response
from user.models import User
from comment.models import PostType, Like
from like.serializers import LikeSerializer
class LikeView(APIView):
~
# 좋아요 취소 : /like/
def delete(self, request):
try:
request_user = request.data.get("user", "")
request_posttype = request.data.get("posttype", "")
post_id = request.data.get("post_id", "")
user = User.objects.get(id=request_user)
posttype = PostType.objects.get(id=request_posttype)
if not Like.objects.filter(user=user, posttype=posttype, post_id=post_id).exists():
return Response({"error": "좋아요를 등록하지 않았습니다."}, status=status.HTTP_400_BAD_REQUEST)
if Like.objects.filter(user=user, posttype=posttype, post_id=post_id).exists():
Like.objects.filter(user=user, posttype=posttype, post_id=post_id).delete()
return Response({"message": "좋아요 취소 성공"}, status=status.HTTP_200_OK)
except:
return Response({"error": "좋아요 취소 실패"}, status=status.HTTP_400_BAD_REQUEST)
해당 API를 작성해준 뒤 작성한 API가 정상적으로 동작하는지, 그리고 실제로 DB 데이터가 삭제되는지 확인을 해주었다.


다음은 DB에 등록된 데이터 값이 없을 경우 발생하는 에러에 대한 테스트도 진행해주었다.

그리고 예기치 못한 상황으로 인한 에러가 발생할 경우 에러 처리를 위해 try-except를 사용하여 에러 처리가 정상적으로 잘 동작하는지 확인을 해주었다.

이렇게 좋아요 취소 기능에 대한 것을 끝으로 API 기능 구현을 끝마쳤다.
마지막으로 코드들을 점검하면서 불필요하거나 수정이 필요한 부분이 있는지 확인을 해주는 작업을 진행해주었다.
현재 작성한 코드에서는 댓글 삭제 시 에러 처리 부분이 원활하게 진행되지 못하는 부분이 있었는데, 해당 부분도 try-except를 사용하여 에러 처리가 가능하도록 고쳐주었다.
우선 확인을 위한 댓글 데이터를 DB에 넣어주었다.

이제 댓글 삭제 부분에 에러 처리가 가능하도록 코드를 수정해주었다.
# comment/views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response
from user.models import User
from comment.models import PostType, Comment
from comment.serializers import CommentSerializer
class CommentView(APIView):
~
# 댓글 삭제 : /comment/<comment_id>
def delete(self, request, comment_id):
try:
comment = Comment.objects.get(id=comment_id)
comment.delete()
return Response({"message": "댓글 삭제 성공"}, status=status.HTTP_200_OK)
except:
return Response({"error": "댓글 삭제 실패"}, status=status.HTTP_400_BAD_REQUEST)
에러 처리 부분을 추가해준 뒤 정상적으로 코드가 돌아가는지 확인을 해주었다.


Postman에서도 API 통신이 잘 이루어지고, DB에도 테스트용 댓글 데이터가 삭제된 것을 볼 수 있었다.
이제 예기치 못한 상황이 발생할 경우 에러가 발생하면 해당 부분에 대한 에러 처리도 잘 나오는지 확인해주었다.

현재 DB에 삭제하고자 하는 데이터가 없으므로 '댓글 삭제 실패'라는 error 메시지가 반환되는 것을 볼 수 있었다.
이렇게 댓글 삭제에 대한 에러 처리도 추가해준 뒤, 코드를 작성하면서 적어둔 print() 및 일부 주석 등을 삭제해주면서 코드를 마무리 지었다.

-
오늘을 끝으로 맡은 부분에 대한 API 구현을 끝마쳤다.
이제 내일을 최종으로 코드를 Github에 올리고 PR을 진행하면서 병합하고, 각 팀원들의 코드가 정상적으로 잘 작동되는지 확인을 해주고 수정해야 할 부분을 고치면 API 구현을 끝이 날 것 같다.
API 구현이 끝났다고 해서 프로젝트가 끝난 것이 아니기 때문에 남아있는 일정들을 진행하면서 프로젝트를 완성해나가고자 한다.
:D
'TIL 및 WIL > TIL (Today I Learned)' 카테고리의 다른 글
| [TIL] 2022.07.26 (Django DRF JWT) (0) | 2022.07.26 |
|---|---|
| [TIL] 2022.07.21 (MLT API 구현, My Little Trip(8)) (0) | 2022.07.21 |
| [TIL] 2022.07.18 (MLT API 구현, My Little Trip(6)) (0) | 2022.07.18 |
| [TIL] 2022.07.15 (MLT API 구현, My Little Trip(5)) (0) | 2022.07.15 |
| [TIL] 2022.07.14 (MLT API 구현, My Little Trip(4)) (0) | 2022.07.14 |