프로젝트 회고

클론 프로젝트 카카오 프렌즈샵

김영재0412 2023. 1. 1. 23:10

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
            );
        }
    };

이렇게 코드를 완성하였고 문제없이 잘 동작하였다.

 

이번 프로젝트는 코드를 짠다라는 느낌보다 알고리즘 문제를 푼다는 느낌이 더 강했다. 개인적으로 알고리즘 문제는 딱히 도움이 되지않는다 라고 생각했는데 이번 프로젝트를 경험하고 정말 중요하구나 실감했다. 알고리즘 문제도 시간 남을 때마다 꾸준히 계속 꼭 풀어봐야겠다!