Project/첫번째 프로젝트 쇼핑몰 웹

[node js - express 쇼핑몰 웹] 2. 삭제된 product 정보 cart와 order에 적용시키기

무니웜테일패드풋프롱스 2020. 7. 15. 00:25

📌2020 07 12


  • UI 수정

  • 사용자가 특정 아이템 스키마를 삭제했는데 Cart와 Order에 해당 아이템이 담겨 있는 버그 발견. null로 인식하여 getCart 라우팅과 getOrder 라우팅에서 에러 발생

  • 각각 User 모델과 Order 모델에서 renew 메서드 구현. 현재 Cart와 Order에 저장된 ProductId에 해당하는 모든 Product를 찾고, 해당 Product의 개수와 현재 Cart, Order에 담겨있는 아이템의 개수가 다를 경우 Cart와 Order를 갱신해주도록 함

renew메서드

OrderSchema.methods.renewOrder=function(){
    const productIds = this.products.items.map(i=>{
        return i.productId;
    });
    const updatedOrderItems=[];
    return Product.find({'_id':productIds})
    .then(products=>{
        if(Object.keys(products).length < Object.keys(this.products.items).length){ // length가 다르다면 
            for( p of products){
                const qtity = this.products.items.find(i=>{
                    return i.productId.toString()===p._id.toString(); // id값이 같다면 
                }).quantity; // quantity 추출 
                if(qtity>0) updatedOrderItems.push({productId:p._id, quantity: qtity}); // quantity가 추출되었다면 
            }
        }
        this.products.items=updatedOrderItems;
        return this.save();
    })