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'
電子商取引のウェブサイトの上の花はショッピングかごと決済しますか?そのカート部分はチームメンバーが制作を担当しています.

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が反応する様子を見ると、喜びが忘れられません.もし時間があれば、私も良い答案を書くべきだと思います.