아! 거지같은거 ! 드디어 다 만들었다.
근데 이게 한개의 물건을 여러개 담는 것 까지는 구현이 된 것 같은데.
여러개의 물건을 여러개 담을 경우에는 조금 고장이 날 것 같다.
배열의 형식으로 처리를 하면 되긴 할 것 같은데 구현을 해놓진 않은 상태라서, 이것 또한 참고하는게 좋을 것 같다.
그리고 시간이 나면 기능들을 추가해야할 것 같다.
일단 ERD부터 올려놓고 시작하겠다.
유저 1 : N 장바구니
물건 1 : N 장바구니
물건 상세 1 : 1 물건
이유는 뭐 어그로(?)를 끌기 위하여 상품의 이름을 바꾼다거나, 가격 할인률이 변경되는 경우가 있어서 추가해놓은 상태다.
createQueryBuilder()가 뭐냐면, 조금 더 Query문에 가까운 문법이라고 생각하면 된다.
그래서 일반 쿼리문에 존재하는 다양한 옵션들을 참조할 수 있는데
typeorm에서 지원하는 옵션을 쓸 경우에는, Service 단을 불러와야하기 때문에
불러올 때 사용하는 entity를 module에 추가를 해야한다는 단점이 발생한다.
이게 왜 단점이냐면, Nest에서는 서로 상속받는 것이 엄청 중요해서, 연쇄적으로 충돌이 발생하는 경우도 있기 때문이다.
그래서 쿼리빌더를 사용하면 조금 줄이 길긴 한데.... 아무튼 편하게 사용할 수 있다.
진짜 죽어라 쓴 것 같다. 정말 편해서 이건 계속 공부를 해보려고 한다, 일단 재밌음(...?)
아래는 여러가지 사용 사례
await getConnection()
.createQueryBuilder()
.select('cart')
.from(Cart, 'cart')
.innerJoinAndSelect('cart.user', 'user')
.innerJoinAndSelect('cart.product', 'product')
.where({ user: user_id })
.getMany();
await getConnection()
.createQueryBuilder()
.select('product')
.from(Product, 'product')
.where({ name: item })
.getOne();
await getConnection()
.createQueryBuilder()
.delete()
.from(Cart)
.where({ product: productData, user: user_id })
.execute();
await getConnection()
.createQueryBuilder()
.update(ProductInfo)
.set({ volume: () => `volume-${readata[i].volume}` })
.where({ name: readata[i].product.name })
.execute();
await getConnection()
.createQueryBuilder()
.delete()
.from(Cart)
.where({ user: user_id })
.execute();
await this.productRepository
.createQueryBuilder()
.update(Product)
.set({
name: updateInfo.name,
price: updateInfo.price - updateInfo.price * updateInfo.sale,
})
.where({ info: dataInfo })
.execute();