https://github.com/kimmand0o0/cacaoFriends_BackEnd
GitHub - kimmand0o0/cacaoFriends_BackEnd
Contribute to kimmand0o0/cacaoFriends_BackEnd development by creating an account on GitHub.
github.com

실전프로젝트로 우린 카카오 프렌즈샵을 하였다. 대략적인 내용은 깃허브에 있기에 코드적인 말만 하겠다.
나는 장바구니 구매내역을 담당하였고 장바구니만 잘 짜면 구매내역은 쉽게 해결되었기에 장바구니에 집중하였다. 우선 장바구니의 형태를 어떻게 할 것인가 라는 고민을 많이 하였다. 가장 이쁜 형태는
{
“cartsId": 1,
"userId": 1,
"products": [
{
"productId": 1,
"quantity": 1,
"name": "product 1",
"price": 11
},
{
"productId": 2,
"quantity": 2,
"name": "product 2",
"price": 22
}
],
"createdAt": "2019-12-04T19:02:19.567Z",
"updatedAt": "2019-12-04T19:02:59.703Z",
}
이러한 형태라고 생각했고 저 productId를 FR key 설정을 하면 끝이겠다 라고 생각을 했다. 하지만 아무리 구글링을 해봐도 Json 안에 있는 오브젝트를 FR key 설정하는 법을 찾을 수 없었고 실제로 FR key를 쓰는 것을 추천 안 하는 글도 많아서 포기하였다.
우선 장바구니의 담겨질 때 3가지의 경우가 있었다.
Carts라는 테이블에 해당하는 유저아이디가 없을 때, Carts라는 테이블에 해당하는 유저아이디가 있지만 products 배열안에 productId가 없을 때, Carts라는 테이블에 해당하는 유저아이디가 있고 products 배열안에 productId가 있을 때 총 3가지의 경우가 있었다.
우선 첫번째 경우에는 주어진 값들을 모두 가져가서 저 형태에 맞게 만들어주면 되기에 간단했다. 두번째 경우부턴 findeindex를 이용해서 해당하는 productId가 있나 없나부터 확인하였다. 있으면 배열 순서에 맞는 값을 주었고 없으면 -1를 주었다. 두번째 경우는 -1를 받은 경우고 값들을 carts.products.unshift로 값을 넣어줬다. 세번째는 먼저 findindex에서 값을 받은 뒤carts.proudcts[findeindex에서 받은 값]으로 productId의 해당하는 순서를 찾은 뒤 수량만 추가해주면 되었고 그 값을 update 해주면 되었다.
addCart = async (productId, amount, userId) => {
const carts = await this.cartsRepository.findCart(userId);
const productInfo = await this.productsRepository.getProductsDetail(
productId
);
if (!productInfo) {
throw new InvalidParamsError('존재하지않는 상품입니다.');
}
const { productName, productPrice, imageUrl } = productInfo;
const quantityPrice = productPrice * amount;
if (carts) {
const existProduct = carts.products.findIndex(
(product) => product.productId === productId
);
if (existProduct > -1) {
const product = carts.products[existProduct];
product.amount += amount;
product.quantityPrice += quantityPrice;
carts.products[existProduct] = product;
} else {
carts.products.unshift({
amount,
productId,
productName,
quantityPrice,
imageUrl,
});
}
await this.cartsRepository.addCart(carts);
} else {
await this.cartsRepository.addFirstCart(
productId,
amount,
userId,
productName,
quantityPrice,
imageUrl
);
}
};
이렇게 코드를 완성하였고 문제없이 잘 동작하였다.
이번 프로젝트는 코드를 짠다라는 느낌보다 알고리즘 문제를 푼다는 느낌이 더 강했다. 개인적으로 알고리즘 문제는 딱히 도움이 되지않는다 라고 생각했는데 이번 프로젝트를 경험하고 정말 중요하구나 실감했다. 알고리즘 문제도 시간 남을 때마다 꾸준히 계속 꼭 풀어봐야겠다!
'프로젝트 회고' 카테고리의 다른 글
| 실전 프로젝트 - Pillnuts 기술 정리 (0) | 2023.02.05 |
|---|---|
| node 개인과제 - 로그인, 회원가입 구현 및 mysql (0) | 2022.12.08 |
| node 개인과제 - CRUD 구현하기 (0) | 2022.11.29 |
| 6일차~9일차 풀스택 프로젝트 회고 (0) | 2022.11.18 |
| 프로젝트3 회고록 (0) | 2022.07.13 |