1st Project [ wesop! ] -3 CODE Review - My team
프로젝트의 좋은 점은 여러사람이 하나의 목표를 해내기 위해 협동한다는 점이다. wesop 프로젝트는 내가 백엔드 개발자로서 참여한 첫 프로젝트였고 고생한 팀원들의 코드를 한번 리뷰 해보려고 한다.
Cart models.py
from django.db import models
from products.models import Product
from users.models import User
from cores.timestamp import TimeStamp
class Cart(TimeStamp):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
class Meta:
db_table = 'carts'
e커머스 사이트의 꽃은 장바구니와 결제가 아닐까? 그 카트 부분을 팀원이 맡아서 작성해 주셨다.
Cart views.py
import json
from django.http import JsonResponse
from django.views import View
from cores.utils import author
from carts.models import Cart
class CartView(View):
@author
def post(self, request):
try:
data = json.loads(request.body)
cart, created = Cart.objects.get_or_create(
user = request.user,
product_id = data['product_id']
)
if not created and cart.quantity < 20:
cart.quantity += 1
cart.save()
return JsonResponse({'message': 'SUCCESS'}, status=200)
elif not created and cart.quantity > 19:
return JsonResponse({'message': 'INVALID_QUANTITY'}, status=200)
else:
return JsonResponse({'message': 'SUCCESS'}, status=201)
except Cart.DoesNotExist:
return JsonResponse({'message': 'CART_DOES_NOT_EXIT'}, status=400)
except KeyError:
return JsonResponse({'message': 'KEY_ERROR'}, status=400)
@author
def get(self, request):
user = request.user
carts = Cart.objects.filter(user=user)
if not carts.exists():
return JsonResponse({'message': 'INVALID_USER'}, status=400)
result = [{
'userId' : user.id,
'cartId' : cart.id,
'quantity' : cart.quantity,
'productId' : cart.product.id,
'productName' : cart.product.name,
'productSize' : cart.product.size,
'totalPrice' : int(cart.quantity * cart.product.price)
} for cart in carts]
return JsonResponse({'message': result}, status=200)
@author
def patch(self, request, cart_id):
try:
data = json.loads(request.body)
user = request.user
quantity = data['quantity']
if quantity <= 0 or quantity >= 21:
return JsonResponse({'message': 'INVALID_QUANTITY'}, status=400)
if Cart.objects.filter(id=cart_id).exists():
cart = Cart.objects.get(id=cart_id, user=user)
cart.quantity = data['quantity']
cart.save()
return JsonResponse({'message': 'QUANTITY_CHANGED'}, status=201)
return JsonResponse({'message': 'CART_DOES_NOT_EXIT'}, status=404)
except KeyError:
return JsonResponse({'message': 'KEY_ERROR'}, status=400)
@author
def delete(self, request):
try:
cart_ids = request.GET.getlist('cart_ids')
user = request.user
if not cart_ids:
return JsonResponse({'message': 'LIST_EMPTY'}, status=400)
Cart.objects.filter(id__in=cart_ids, user_id=user).delete()
return JsonResponse({'message': 'CART_DELETED'}, status=200)
except ValueError:
return JsonResponse({'message': 'VALUE_ERROR'}, status=400)
버튼 누를때 마다 상품의 수량에 따라 db가 반응할 때 모습을 보았을때 희열을 잊지못한다. 시간이 된다면 좋은 답안지로 남기고 나도 한번 작성을 해봐야 겠다고 생각이 들었다.
Author And Source
이 문제에 관하여(1st Project [ wesop! ] -3 CODE Review - My team), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soohun9909/1st-Project-wesop-2-팀원이-작성한-CODE저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)