21.3.25

1차 프로젝트 10일차

최종 제작일 및 최종발표 준비일

1. 스탠딩 미팅

프론트 / 백엔드 진행 상황 공유 및 오늘 할 일
<프론트>

  • 전반적인 부분 손보기(푸터, 로그인, 사인인 등)
  • 플로우 잘 흘러가는지 손보기
  • 장애 요인 : 브랜치 충돌 나는 점에 대해 알아봄(마스터 최신화)
  • 메인페이지 맞춰보기
  • 상세페이지 세부 조절, 장바구니 모달 외 기본 구현 완료, 컨플릭트 날 때마다 맞추기

<백엔드>

  • 메인페이지 맞추고 장바구니 및 주문 마무리
  • 쿠폰 마무리 + 그 외 필요 작업(데이터) 나눠서 하기

2. 코드 리뷰

1. 위시리스트

  1. 프론트에서 보내주는 정보(payload)는 결과가 아니다. 따라서 results라는 변수를 쓰는 것은 부적절하다. 또한 객체만 받으면 되기 때문에 굳이 변수에 담아 할 필요가 없다.
  • 일단 받는 값
before

{"results": [
{"product_id": 1, 
"quantity" :4, 
"product_option_id": "", 
"product_option_quantity":0
}]
}

after

{"product_id": 1, 
"quantity" :4, 
"product_option_id": "", 
"product_option_quantity":0
}

이에 따른 적절한 코드는 다음과 같다.

before

class WishListView(View):
    @auth_check
    @transaction.atomic
    def post(self, request):
        try:
            results = json.loads(request.body)['results']
            user_id = request.user.id
            for result in results:
                product_id              = result['product_id']
                quantity                = result['quantity']
                product_option_id       = result['product_option_id']
                product_option_quantity = result['product_option_quantity']            
                        
after

class WishListView(View):
    @auth_check
    @transaction.atomic
    def post(self, request):
        try:
            data  = json.loads(request.body)
            user_id = request.user.id
            product_id              = data['product_id']
            quantity                = data['quantity']
            product_option_id       = data['product_option_id']
            product_option_quantity = data['product_option_quantity'] 
  • data로 반복문 없이 아주 깔끔하게 받아올 수 있다.
    product_id와 user_id는 프론트가 주는 정보와 토큰으로 알 수 있기 때문.

2. 쿠폰

  1. RESTful한 url 사용하기
  • user/coupon/~~ 이런 식도 생각하기.
  1. 불필요한 연속된 반복문 제거하는 법
            result = []
            for i in user_coupon_list:
                if i in sub_category_coupon_list:
                    result.append(i)

            coupon_name = []
            for j in result:
                coupon = Coupon.objects.get(id=j)
                coupon_name.append(coupon.name)
  • 여기서 유저 쿠폰 리스트가 서브 카테고리 쿠폰 리스트 아이디에 속해 있으면 그 아이디를 또 쿠폰네임에 담기 위해 coupon.name식으로 다시 반복문을 돌린 것이다.
    (즉 결과는 [1, 2]로 나온 뒤 이걸 또 반복문을 돌려서 ['할인쿠폰1', '할인쿠폰2'] 이렇게 나오게.)
  • 해결 : 리스트 컴프리핸션으로 한 줄로 처리
coupon_name = [Coupon.objects.get(id=j).name for j in [i for i in user_coupon_list if i in sub_category_coupon_list]]
  1. 어제 해결한 문제 중 새로운 쿠폰을 등록할 때 갑자기 모든 쿠폰을 가져와서 이미 존재하는 쿠폰마다 방금 등록한 쿠폰과 동일하게 서브 카테고리를 씌워버리는 로직
  • 원래 의도한 것 : 새로 추가하는 서브카테고리마다 새로운 쿠폰을 적용하되 여러 서브카테고리를 한 번에 등록할 수 있게 하는 것
  • 필요했던 것 : 리스트 형태의 서브 카테고리가 가진 쿼리셋을 풀어서 그 안에 오브젝트의 name의 아이디와 쿠폰 아이디를 엮는 것.
  • 해결 :
coupon = Coupon.objects.get(name=data['name'])
# 먼저 쿠폰을 가져오고(만들어진 것)
            sub_categories   = SubCategory.objects.filter(name__in=data['sub_category_name'])
# name__in : 서브카테고리 객체를 네임으로 필터링할 때 프론트로부터 받아온느 제이슨 데이터 형태가 리스트일 때 쓰는 방식
            for sub_category in sub_categories:
                coupon_sub_category = CouponSubCategory.objects.create(
                    coupon=coupon, 
                    sub_category=sub_category
                    )
{
    "name" : "쿠폰4",
    "discount_price" : 4000,
    "issue_date" : "2021-03-20",
    "expire_date" : "2022-03-19",
    "sub_category_name" : ["신발"]
}
- 여기서 신발, 양말 등 여러 리스트 형태로 와도 잘 입력된다.
  • 실제 데이터 베이스 결과(왼:쿠폰_id, 오 : 서브카테고리_id)

참고 링크

3. 전체 세션 : AWS 및 실습

  • 이론 간단히 듣고 실제로 해보기
  • 데이터베이스 빼온 뒤 AWS에 넣기에서 막힘. 추후에 다시 해보기.

    version 문제 였음.(5.26 < 8.22)

4. 그 외 한 일 + 팀원 간 협업

5. 익일 할 일

  • 마지막 스탠드 미팅
  • 지침에 맞는 최종 발표 준비

좋은 웹페이지 즐겨찾기