본문으로 바로가기

12.7 수 | 비매너 정지 코드 리팩토링

category TIL 2022. 12. 8. 00:56

첫 if에서 false하고 제일 아래에 else를 통해 리턴을 했었는데 코드리뷰를하며 리턴값이 멀어서 보이지않는 좋지않은 코드라는 이야기를 듣고 리팩토링을 해봤다 아직까지 깔끔한 코드가 무엇인지 어떤코드가 정형화된, 일관성있는건지 잘 모르겠다. 하지만 오늘 멘토님이게 들은바로는 내코드를 보는사람이 잘이해하는 코드가 좋은코드라고 했다. 지금까지 그런생각없이 코딩을 했다면 팀원들의 도움을 받은 오늘을 계기로 완성도있는 좋은코드를 작성하는 개발자가 될것이다.

        if review_exist==True:
            """
            리뷰 1회 제한
            """
            return Response("이미 평가를 했어요", status=status.HTTP_400_BAD_REQUEST)
        else:
            if serializer.is_valid() and request.user.id==goods_obj.seller_id:
                """
                author 셀러일때 review의 receiver 저장
                """
                buyer=get_object_or_404(User, id=goods_obj.buyer_id)
                buyer.rating_score = buyer.rating_score + int(score)
                buyer.save()
                serializer.save(author = request.user, receiver=buyer, goods = goods_obj) # 포린키에 저장하는건 id str이 아니라 객체임 그래서 객체가져와서 저장해야한다.
                if score != -20:
                    return Response(serializer.data, status=status.HTTP_200_OK)
                else:
                    try:
                        receiver_review_score = Review.objects.filter(receiver_id=goods_obj.buyer_id).order_by('-created_at').values()[1]
                        if receiver_review_score['score'] == -20:
                            buyer.is_active = 0
                            buyer.save()
                            return Response("연속적인 비매너로 정지", status=status.HTTP_200_OK)
                    except:
                        return Response("연속적인 비매너는 아니네요", status=status.HTTP_200_OK)

            elif serializer.is_valid() and request.user.id==goods_obj.buyer_id:
                """
                author 바이어일때 receiver 저장
                """
                seller=get_object_or_404(User, id=goods_obj.seller_id)
                seller.rating_score = seller.rating_score + int(score)
                seller.save()
                serializer.save(author = request.user, receiver=seller, goods = goods_obj) # 포린키에 저장하는건 id str이 아니라 객체임 그래서 객체가져와서 저장해야한다.
                if score != -20:
                    return Response(serializer.data, status=status.HTTP_200_OK)
                else:
                    try:
                        receiver_review_score = Review.objects.filter(receiver_id=goods_obj.seller_id).order_by('-created_at').values()[1]
                        if receiver_review_score['score'] == -20:
                            seller.is_active = 0
                            seller.save()
                            return Response("연속적인 비매너로 정지", status=status.HTTP_200_OK)
                    except:
                        return Response("연속적인 비매너는 아니네요", status=status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

아래는 리팩토링 전 코드이다.

        if review_exist==False:
            """
            리뷰 1회 제한
            """
            if serializer.is_valid() and request.user.id==goods_obj.seller_id:
                """
                author 셀러일때 review의 receiver 저장
                """
                buyer=get_object_or_404(User, id=goods_obj.buyer_id)
                buyer.rating_score = buyer.rating_score + int(score)
                buyer.save()
                serializer.save(author = request.user, receiver=buyer, goods = goods_obj) # 포린키에 저장하는건 id str이 아니라 객체임 그래서 객체가져와서 저장해야한다.
                if score == -20:
                    try:
                        receiver_review_score = Review.objects.filter(receiver_id=goods_obj.buyer_id).order_by('-created_at').values()[1]
                        if receiver_review_score['score'] == -20:
                            buyer.is_active = 0
                            buyer.save()
                            return Response("연속적인 비매너로 정지", status=status.HTTP_200_OK)
                    except:
                        return Response("연속적인 비매너는 아니네요", status=status.HTTP_200_OK)
                else:
                    return Response(serializer.data, status=status.HTTP_200_OK)

            elif serializer.is_valid() and request.user.id==goods_obj.buyer_id:
                """
                author 바이어일때 receiver 저장
                """
                seller=get_object_or_404(User, id=goods_obj.seller_id)
                seller.rating_score = seller.rating_score + int(score)
                seller.save()
                serializer.save(author = request.user, receiver=seller, goods = goods_obj) # 포린키에 저장하는건 id str이 아니라 객체임 그래서 객체가져와서 저장해야한다.
                if score == -20:
                    try:
                        receiver_review_score = Review.objects.filter(receiver_id=goods_obj.seller_id).order_by('-created_at').values()[1]
                        if receiver_review_score['score'] == -20:
                            seller.is_active = 0
                            seller.save()
                            return Response("연속적인 비매너로 정지", status=status.HTTP_200_OK)
                    except:
                        return Response("연속적인 비매너는 아니네요", status=status.HTTP_200_OK)
                else:
                    return Response(serializer.data, status=status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)                
        else:
            return Response("이미 평가를 했어요", status=status.HTTP_400_BAD_REQUEST)