Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

날래의 개발 성장일지

첫 번째 팀 프로젝트 회고 작성 본문

회고작성

첫 번째 팀 프로젝트 회고 작성

nallae 2022. 5. 15. 20:43

처음 작성했었던 장바구니 조회 코드

module.export = async function (fastify, opts){
    fastify.get('/', async function (request, reply){
        const cartread = this.mongo.db.collection(process.env.COLLECTION_CART)
        const result = await cartread.find({}).toArray()
        reply
          .code(200)
          .header('Content-Type', 'application/json; charset=utf-8')
          .send(result)}
     )
}

이렇게 작성하고 보니 모든 사용자들의 모든 장바구니의 내역이 조회되는 불상사가 일어났다.....

우리가 원하는 응답은 아래와 같이 상품정보와 구매수량이 함께 응답에 나오도록 하는 것이었다.

{ 
"data" : [ 
{ "productid" : "56432", 
  "productTitle" : "Apple Watch", 
  "brandName" : "Apple", 
  "price" : "200,000", 
  "category" : "전자기기", 
  "count" : 1 
  }, 
  { 
  "productid" : "82154", 
  "productTitle" : "Ipad pro", 
  "brandName" : "Apple", 
  "price" : "1,000,000", 
  "category" : "전자기기", 
  "count" : 1 
  } 
 ] 
}

모든 장바구니가 조회되지 않도록 authorization.token을 코드에 작성했다.

'use strict' 

module.exports = async function (fastify, opts) { 
    fastify.get('/', async function (request, reply) { 
        const token = request.headers.authorization.split(" ")[1] 
        if (Number(token) === 1) { 
          const tokenuserId = "627c9a18784c242727f6bd9f" 
          const cartread = this.mongo.db.collection(process.env.COLLECTION_CART) 
          const mycart = await cartread.find({buyerId : tokenuserId}).toArray() 
        if (mycart === null) { reply .code(403) } else { 

        reply 
        .code(200) 
        .header('Content-Type', 'application/json; charset=utf-8') 
        .send(mycart) 
        } 
     }  
    }) 
}

이렇게 작성했더니

[ 
    { 
      "_id": "627e0f2a1622eba2b7266523", 
      "count": 3, 
      "buyerId": "627c9a18784c242727f6bd9f", 
      "productId": "627cbb13784c242727f6bda3" 
    } 
]

이러한 응답이 왔다.

우리가 작성한 ERD를 보면 우리가 원하는 응답을 받기 위해서는 userId를 조회해서 cartId를 찾은 후에 productId를 다시 찾아 product 테이블에서 상품 정보를 받아와야 했다.

하지만 우리가 작성한 authorization.token값이 있기 때문에 userId를 조회하는 과정은 빼고 토큰값에 대응하는 userId를 찾아 cart에서 productId를 가지고 와서 상품정보를 가지고 오도록 작성했다.

const { ObjectId } = require('@fastify/mongodb')


module.exports = async  function (fastify, opts) {

fastify.get('/', async  function (request, reply) {

const  token = request.headers.authorization.split(" ")[1]



if(Number(token) === 1) {

const  tokenuserId = "627c9a18784c242727f6bd9f"

//token값으로 1을 가지고 있는 Id = "627c9a18784c242727f6bd9f"

const  cartread = this.mongo.db.collection(process.env.COLLECTION_CART)

const  mycart = await  cartread.find({buyerId :  tokenuserId}).toArray()

//COLLECTION_CART 에서 buyerId로 "627c9a18784c242727f6bd9f"값을 가지고 있는 것을 모두 찾아 배열한다.

if (mycart === null){

reply

.code(403)

}

//mycart (buyerId로 "627c9a18784c242727f6bd9f"값을 가지고 있는 것)이 없다면 403코드를 반환한다.

else {

const  productIds = []

const  count = []

mycart.map((el) => {

productIds.push(el.productId)

})

mycart.map((el) => {

count.push(el.count)

})

//이 부분이 제일 헷갈렸는데,
//productIds = [] 로 productIds라는 Value를 지정하고 mycart에서 찾은 값들을 productIds라는 
//배열의 요소(Element)로 입력한다. 
//마찬가지로 count도 count라는 배열의 요소로 입력한다.

const  products = []

const  product = this.mongo.db.collection(process.env.COLLECTION_PRODUCT)

for (let  i = 0; i < count.length; i++) {

const  findproductId = await  product.findOne({_id :  ObjectId(productIds[i])})

products.push(findproductId)

console.log(products);

}

//productIds의 배열 안에는 "627c9a18784c242727f6bd9f" 이러한 아이디들이 값으로 들어있는데,
//우리가 원하는 것은 상품의 '정보'이기 때문에 for문으로 COLLECTION_PRODUCT에서 productIds를 조회해서 나온 
//객체들을 하나씩 products라는 배열의 요소로 입력한다. 

const  result = []

for (let  j = 0; j <count.length; j++) {

const  el = products[j]  //el라는 객체에 products라는 객체를 할당한다.

el.count = count[j]  //products는 Value와 key값을 모두 가지고 있는 객체이지만, count는 Value만 가지고 있기 때문에 
//count[j]라는 키 값을 따로 생성해준다.

result.push(el);  //products의 값에 count 값을 추가하여 입력한다.

}





reply

.code(200)

.header('Content-Type', 'application/json; charset=utf-8')

.send(result)

}

}

}

)

}

이렇게 작성하면

[

{

"_id": "627cbb13784c242727f6bda3",

"productTitle": "Apple Watch",

"brandTitle": "Apple",

"price": "200,000",

"category": "전자기기",

"count": 3

}

]

product에 있는 상품명, 브랜드명, 가격, 카테고리등의 정보와 cart에 있는 수량 정보가 함께 나타난다.

'회고작성' 카테고리의 다른 글

Team Project - 2  (0) 2022.06.12
Docker_02  (0) 2022.05.26
Docker_01  (0) 2022.05.25
Proxy 서버 만들기  (0) 2022.05.17