반응형

Encapsulation 캡슐화 - 서로 관련있는 함수와 데이터를 한곳에 담아 외부와 상관이 없게

-> 내부의 상태를 외부에서 직접 변경 안됨

Abstraction 추상화 - 내부구조를 다 이해하지 않아도 외부에서 사용가능

Inheritance 상속 - 한번 잘 정의한 클래스를 잘 재사용하는것.

Polymorphism 다양성 - 공통적으로 함수를 호출?

-> 커피기계종류를 상관 않고 커피를 내리는것?

 

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

2/15  (0) 2023.02.15
23/2/10  (0) 2023.02.13
23.2.8  (0) 2023.02.08
23/2/7  (0) 2023.02.07
23/2/6/월  (0) 2023.02.06
반응형

Sequelize.literal() 서술적인 SQL 함수를 처리

await this.goodsModel.update(
              {stock: sequelize.literal(`stock - ${findCart[0].quanitity}`)},
              {where: {id: findCart[0].goodsId}, transaction: t}
            )

stock에 업데이트되어야 하는 값이 stock - 카트에 담김 총합 이 되어야 한다.

쿼리 문자열을 추가해 주는 기능이라는데 더 다양한 방법으로 사용되고 코드를 단축시킬 수 있을 거라고 생각이 된다.

https://jeonghwan-kim.github.io/sequalize-%EC%BF%BC%EB%A6%AC/

https://jaehoney.tistory.com/141

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

23/2/10  (0) 2023.02.13
23/2/9  (0) 2023.02.09
23/2/7  (0) 2023.02.07
23/2/6/월  (0) 2023.02.06
23/2/05 티스토리에서 시작  (0) 2023.02.05
반응형

이커머스 프로젝트가 어느 정도 끝나가는 가운데 

유효성검사에 대해 다시 생각하는 시간이 있었다.

createOrder = async (req, res, next) => {
        const User = res.locals.user;
        const userId = User.id
        const { cartId, receiverName, receiverAddress, receiverPhone} = req.body
        try {
            if(!cartId || !receiverName || !receiverAddress || !receiverPhone){
                throw new Error('cart정보나 받는사람 정보가 빠져있습니다.')
            }
            const order = await this.orderService.createOrder(
                cartId, userId, receiverName, receiverAddress, receiverPhone
            );
            return res.status(201).json({ data: order })
        } catch (error) {
            return res.status(400).json({ errorMessage: error.message })
        }
    }

유효성검사를 현재는 body에 정보가 들어있는지 없는지만 했는데 모든 검사를 if문을 이용해서 하기에는 비효율적이라고 생각이 많이 들던 가운데 드림코딩 노드강의를 통해서

express-validator

를 알게 되었다.

드림코딩 Node 강의 따라하면서

router.get('/',배열이들어갈 수있음, (req,res) => {})

배열에 body에 들어가는 값들을 유효성검사를 쉽게 할 수 있는 것을 보고 다음프로젝트에서 적용을 해봐야겠다고 생각이 들었다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

23/2/10  (0) 2023.02.13
23/2/9  (0) 2023.02.09
23.2.8  (0) 2023.02.08
23/2/6/월  (0) 2023.02.06
23/2/05 티스토리에서 시작  (0) 2023.02.05
반응형
showMeTheOrder = async (userId) => {
        try {
            const showOrder = await this.orderModel.findAll({
                where: { userId },
                attributes: [
                "id", "receiverName", "receiverAddress", "receiverPhone", "total_Price"
                ],
                include: [
                    {
                        model: this.cartModel,
                        attributes: ["quanitity", "isDone", "updatedAt",],
                        include: [
                            {
                                model: this.goodsModel,
                                attributes: ["name", "price", "image",]
                            }
                        ]
                    }
                ]
            })
            return showOrder
        } catch (error) {
            throw error
        }
    }

Sequelize를 이용해서 2번이상 join을 할일이 별로 없었지만 이번 프로젝트를 하면서 처음 사용하게 되었다.

이번에 설계한 DB ERD

주문에 대한 정보를 보기위해서 처음 계획부터 order에서 join해서 가져오자는 계획을 세웠지만 실제로 해보는건 처음이어서 

구글링을 해서 알아보고 했다.

 

Orders -> Carts -> Goods 순서로 include한 테이블안에서 한번더 include를 했다. 

만약 Orders에 Goods관련 컬럼이 있었으면 다른 방식으로 하게된다. -> ERD에 더 많은 시간을 사용하자....

 

createOrder = async (
        cartId, userId, receiverName, receiverAddress, receiverPhone, total_Price
    ) => {
        const t = await sequelize.transaction()
        try {
            const findCart = await this.cartModel.findAll({
                where: { id: cartId },
                transaction: t
            })
            console.log('111', findCart)
            if (!findCart.length) {
                throw new Error('없는 카트입니다.')
            }
            if (findCart[0].isDone !== 1) {
                throw new Error('이미 주문된 카트입니다.')
            }
            const createOrder = await this.orderModel.create({
                userId,
                receiverName,
                receiverAddress,
                receiverPhone,
                total_Price,

            }, { transaction: t })
            await this.cartModel.update(
                { isDone: 0 },
                {
                    where: { id: cartId },
                    transaction: t
                }
            );
            await this.cartModel.update(
                { orderId: createOrder.id },
                {
                    where: { id: cartId },
                    transaction: t
                }
            );
            await t.commit()
            return createOrder
        } catch (error) {
            await t.rollback()
            throw error
        }
    }

시퀄라이즈 transaction도 처음 사용해봤다. 동시에 처리되어야 하는 일을 하나의 묶음으로 만들어서 하나라도 안되면 동작이 되지 않게 해주는 기능이다.

transaction을 선언하고 들어가야 하는 부분에 transaction: t를 넣어주고 마지막에  await t.commit()을 해줘야 한다. 이거 빼먹어서 오류가 많이 났다.... 

transaction에 대해서는 구글링해서 사용법만 익히고 넣은것이어서 프로젝트 끝나고 좀 더 살펴봐야겠다.

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

23/2/10  (0) 2023.02.13
23/2/9  (0) 2023.02.09
23.2.8  (0) 2023.02.08
23/2/7  (0) 2023.02.07
23/2/05 티스토리에서 시작  (0) 2023.02.05
반응형
원래 밸로그를 썼었는데 너무 칙칙한 페이지에 쓴 글을 카테고리별로 보기 어렵다고 느껴져서 티스토리로 이사를 오게됬다. 개인 일기 + 공부하면서 중요하게 생각된것 + 작업하면서 오류났던것등을 남기고 하루에 한줄이라도 남겨보는 습관을 길러보자.


 

반응형

'취업전 끄적 > 개발일지' 카테고리의 다른 글

23/2/10  (0) 2023.02.13
23/2/9  (0) 2023.02.09
23.2.8  (0) 2023.02.08
23/2/7  (0) 2023.02.07
23/2/6/월  (0) 2023.02.06

+ Recent posts