22.11.14 MON - 15 TUE (DAY 5 - 6)
팀원 1순위 2순위 3순위 비고 팀장(본인) 장바구니, 주문 리뷰, 토크 마이페이지 이전 프로젝트에서 게시판, 마이페이지 구현 팀원1 상품(영양제) 필터링 위시리스트 이전 프로젝트에서 예외 처리, 기타 업무 팀원2 jwt 인증 유저 테스트 결제 이전 프로젝트에서 유저 + 보안 구현
팀장 : 유저 플로우와 엔티티 사이의 연관관계는 구상을 해두었으나, 장바구니 -> 주문
으로의 로직을 어떻게 구현해야 할 지 여러차례 회의 끝에도 결론이 나지 않아 팀장이 이 부분을 구현하기로 했다.
리뷰와 토크는 게시판을 구현했었던 경험을 토대로 비교적 쉽게 구현할 수 있을 것 같아서 2순위 업무로 배정했다.
팀원1 : 이전 프로젝트에서 예외 처리, 응답 객체 등을 구현했다고 하셨다.
이번 프로젝트에서는 메인이 되는 상품 처리를 맡아보고 싶다고 하셨고 상품 CRUD 구현을 1순위 업무로 배정했다.
상품 CRUD의 연장선인 상품 필터링과 위시리스트 기능을 그 다음 순위로 배정했다.
팀원2 : 이전 프로젝트에서 jwt와 유저 CRUD, 소셜로그인 등을 다뤄보셨다고 하셔서 관련 업무를 배정했다.
소셜 로그인을 도입하면서 외부 API를 경험해보신 적이 있다고 하셔서 테스트 결제를 그 다음 순위로 배정했다.
카트(장바구니)
Cart, ItemCart, Item 사이의 테이블 설계
// ItemCart.java @ManyToOne @JoinColumn(name = "CART_ID") private Cart cart; @ManyToOne @JoinColumn(name = "ITEM_ID") private Item item;
// Cart.java @OneToMany(mappedBy = "cart", cascade = CascadeType.PERSIST) List<ItemCart> itemCarts = new ArrayList<>();
@ManyToOne
애너테이션으로 다대일의 관계를 명시.@JoinColumn
애너테이션으로 ItemCart 테이블에서 외래키에 해당하는 컬럼명 작성.@OneToMany
애너테이션으로 일대다 매핑을 추가해 양방향 관계 매핑.
Repository(리포지토리)
데이터 액세스 계층에서 데이터베이스와 상호작용하는 역할을 하는 인터페이스
// CartRepository.java public interface CartRepository extends JpaRepository<Cart, Long> { Cart findByUser(User user); }
// Cart.java @Entity public class Cart { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long cartId; ... ... }
findByUser(User user);
: Spring Data JPA 에서 지원하는 쿼리 메서드(Query Method)를 이용한 데이터 조회 메서드 정의.// ItemCartRepository.java public interface ItemCartRepository extends JpaRepository<ItemCart, Long> { ItemCart findByCartAndItemAndSubscription(Cart cart, Item item, boolean subscription); List<ItemCart> findAllByCartAndSubscription(Cart cart, boolean subscription); List<ItemCart> findAllByCartAndSubscriptionAndBuyNow(Cart cart, boolean subscription, boolean buyNow); }
ItemCartRepository 인터페이스의 구조는 CartRepository 와 유사함.
findByCartAndItemAndSubscription
findAllByCartAndSubscription
findAllByCartAndSubscriptionAndBuyNow
buynow = true : 선택된 상태
buynow = false : 선택 해제된 상태