장바구니에 대한 고찰 4

별 짓을 다 하다가 지금 결론이 나와서 확정을 내고 작업을 진행하고 있다.
수업을 들으면서 과제도 해야하다보니 진도가 생각보다 안나가는 것 같은데
아마 내일 밤이면 전부 만들 수 있지 않을까?

그리고 충격적인 사실을 들었는데 그 DB를 쓰는게 아니라 쿠키를 쓴다고 하더라

걍...이미 삽질 시작하고 거의 금광까지 보이게 된 김에 걍.. 끝까지 하려고...한다..

그래서 현재 진행 상황은?

구조가 조금 바뀌었다.
유저를 1:1로 하려고 했는데 ㅋㅋ 그러면 배열을 써야한다.

그래서 배열을 JSON.stringify() 로 스트링으로 바꿔서 저장하고
빼서 쓸 떄는 JSON.parse()로 쓰려고 멘토님한테 여쭤봤는데 완전 무식한 방법이라고(.....)
데이터를 접근할때마다 배열로 만들고 다시 풀어서 넣고 하는 과정이 진행되다보면 속도가 느리게 될 것이라며

(실제로도 저거 깊은 복사라는 것으로 배울 때 쓰지 말고 걍 라이브러리 쓰는게 좋다고도 배웠다.)

차라리 유저와 장바구니를 1:1이 아니라 1:N으로 만들어버리고
유저가 담아놓은 모든 장바구니를 한번에 불러오는 방식이 좋을 것 같다고 조언을 해주셔서 걍 엎어버렸다.

그래서 지금 만들어진 구조는

  1. 물건 상세 테이블 제작 완료
  2. 물건 테이블 제작 완료

이 상태에 놓여져있다.

그리고 조인되어있는 것을 불러와다가 업데이트하는 것 까지 할 수 있게 되었고
mysql에 실수를 입력하는 것까지 알게 되어서 어짜피 쿠키로 다 때려박는다고 하지만(,.....)
그래도 나름.... 많이 배워가고 있는 것 같다.

수업 자체에서 배우는 것이 아니라, 내가 순수하게 하나하나 코드를 고쳐나가고 조금 더 짧게 고쳐나가는 이 과정 자체가 상당히 즐거운 것 같다.

그래서 지금 구조는 위에 저정도 완성이 된 상태고 현재 작동하는 코드는

  1. 물건 상세 테이블을 생성할 경우, 그것의 정보가 담겨져있고 할인률이 적용된 가격이 적혀있는 물건 테이블 생성
  2. 물건 상세 테이블이 업데이트 될 경우 상세 테이블의 ID값으로 물건 테이블에서 가져와가지고 업데이트

이만큼 진행이 된 상태다.

내일은 장바구니랑 물건 테이블이랑 1:N으로 엮고
유저랑 장바구니랑 1:N으로 엮은 다음에 한번에 주문하는 것만 해보면 될 것 같다.

오늘 배운 것 !

관계를 맺은 정보로 다른 테이블에서 정보를 가져오기

    const qqq = await this.productRepository
      .createQueryBuilder()
      .where({ info: dataInfo })
      .getOne();

사실 위 코드보다 더 좋은 방식이 있다는 것을 어렴풋 의식하고 있다.

왜냐하면 여기 위에 쓴것도 결국 생성자로 주입을 받은 프로덕트의 레포지토리를 사용하고 있는데

어 찾았다;

await getConnection()
      .createQueryBuilder()
      .select('product') <- 이거는 솔직히 왜 쓰는지 잘 모르겠다.
      .from(Product, 'product')
      .where({ info: dataInfo })
      .getOne();

확실히 쿼리빌더쪽의 코드가 엄청 길다는 이야기를 들었는데, 그 이유를 알 것 같다.

그럼에도 불구하고 왜 이쪽이 더 좋다고 생각하냐면
nest가 서로를 상속받는다고 해야하나? 의존성이 너무 심해서 뭐 서비스 하나 엮으려고 하면 가져와야하는 것들이 너무 많다.

그래서 뭔가 하나를 추가하면 동시다발적으로 여러곳에서 에러를 내뱉는데(--)
최대한 줄여나가려면 일단 서비스와 레포지토리를 불러오지 않는 방향이 좋다보니 쿼리빌더를 쓰는 식으로 방향성을 잡아봐야할 것 같다.

좋은 웹페이지 즐겨찾기