첫 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)
'TIL' 카테고리의 다른 글
12.10 토 | viewset 사용해보기 | 파라미터 사용하기위해 어떻게 해야할까? (0) | 2022.12.10 |
---|---|
backend | project review_receiver_backend (0) | 2022.12.08 |
12/6 | 프로젝트 백엔드 프론트 (0) | 2022.12.07 |
timeago 모듈 | 시간오류수정 | (0) | 2022.12.04 |
serializer valid | django validator | (0) | 2022.11.29 |