본문 바로가기

TIL 및 WIL/TIL (Today I Learned)

[TIL] 2022.07.18 (MLT API 구현, My Little Trip(6))

오늘은 좋아요 기능 구현을 금일 API 기능 구현 목표치로 정해두고 진행을 하였다.

 

like 기능을 구현하기 전에 comment app에 comment와 like 두 가지 기능이 함께 명시되어 있는 상황이었기에 like 기능 구현을 위해 따로 like app을 생성해준 뒤 필요한 부분을 따로 옮겨주면서 comment와 like를 분리해주는 작업을 진행해주었다.

 

like app

 

좋아요 관련 기능은 like app에서 진행할 수 있도록 만들어준 뒤 API 구현을 진행하였다.

 

좋아요 API 구현을 하는 도중 앱 생성 후 commit을 하는 과정에서 실수가 발생하였다.

'like/urls.py'로 생성하여 commit을 해야 됐었으나, 확장자명(.py)을 까먹고 만들어버리는 바람에 commit을 되돌리고자 명령어를 적어주었다.

'git reset --hard HEAD^' 명령어를 사용하여 관련된 commit을 되돌리려고 하였으나, 명령어를 중복으로 입력하는 실수로 인해 일부분 작성하였던 코드를 삭제시켜버렸다.

 

해당 실수로 인하여 다소 시간이 지체되었으나, 이후 다시 좋아요 등록 기능을 구현해두었다.

 

# like/views.py

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 post(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)

            like_serializer = LikeSerializer(data=request.data)

            if Like.objects.filter(user=user, posttype=posttype, post_id=post_id).exists():
                return Response({"error": "이미 좋아요를 등록했습니다."}, status=status.HTTP_400_BAD_REQUEST)
            
            if like_serializer.is_valid():
                # like_serializer.save(user=user, posttype=posttype)
                return Response({"message": "좋아요 등록 성공"}, status=status.HTTP_200_OK)
        
        except:
            return Response({"error": "좋아요 등록 실패"}, status=status.HTTP_400_BAD_REQUEST)

    # 좋아요 취소 : /like/
    def delete(self, request):
        return Response({})

 

해당 API가 정상적으로 잘 작동되는지 Postman에서 확인을 해보았다.

 

좋아요 등록 (POST)

 

좋아요 등록 API가 정상적으로 작성되는 것을 확인하였고, 이후 DB에도 해당 데이터가 잘 들어가는지 확인해주었다.

 

등록된 DB 데이터

 

해당 값과 일치한 데이터가 들어가는 것을 확인할 수 있었다.

 

이후 이미 똑같은 값이 있거나 에러 발생 시 나오는 메시지도 확인을 해보았다.

 

등록된 값이 있을 때
에러 발생 시

 

요청받은 정보와 일치하는 것이 있다면 "이미 좋아요를 등록했습니다." 문구가 뜨는 것을 볼 수 있었다.

그리고 user_id가 11과 일치하는 정보가 없기에 오류가 발생하면 except에서 반환해준 "좋아요 등록 실패"도 잘 나오는 것을 볼 수 있었다.

 

-

 

오늘은 목표치로 좋아요 등록/삭제 기능 구현을 위해 코드를 작성하였으나, commit을 되돌리는 과정에서 실수를 범하는 바람에 다소 시간이 지체된 점이 아쉬웠다.

 

그래도 중간에 작성한 코드를 복구하고 완성시키느라 시간이 조금 더 걸렸지만 좋아요 등록 기능을 구현할 수 있어서 다행이라고 생각한다.

 

:P