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가 반응할 때 모습을 보았을때 희열을 잊지못한다. 시간이 된다면 좋은 답안지로 남기고 나도 한번 작성을 해봐야 겠다고 생각이 들었다.

좋은 웹페이지 즐겨찾기