쇼핑몰 개발 - spring boot + thymeleaf (3일차)

2022. 9. 1. 19:53프로젝트/Spring Project

# 3일차 - order

 

Order Entity

주문 엔티티는 ManyToOne, OneToMany 매핑을함.

한명을 고객은 여러 주문을 할 수 있고, 하나의 주문에 여러 상품들이 담길수 있기때문에 어노테이션 붙여줌.

둘다 지연로딩이며 주문 상품은 영속성 전이(casecade), orphanremoval을 true로함. 

mappedBy 는 양방향 관계일때 보통 사용하고 연관관계의 주인은 mappedBy 옵션을 사용하지 않고 반대쪽 객체에서 사용한다.

출처: https://zzang9ha.tistory.com/350

보통 1:N 관계 테이블 설정할때 저렇게 옵션을 추가해준다.

자식 엔티티의 변경이 있다면

JPA 에서 자식엔티티의 수정은 insert update update delete 순으로 이어지는데

변경된 자식을 먼저 insert 하고

기존의 자식을 NULL로 update 한다.

그리고 orphanRemoval 옵션을 true 로 하면 기존 NULL처리된 자식을 DELETE 한다. 

PK(JoinColumn)값이 NULL로 변한 자식은 고아객체라고 하여 연결된 점이 없는 객체이다. 

orphanRemoval옵션은 바로 이 고아객체를 삭제해주는 역활을 한다.

출처: https://dev-elop.tistory.com/entry/JPA-orphanRemoval-용도 [현직개발자:티스토리]

 

주문 엔티티 빌더패턴 사용.

우선 주문 객체를 만들고 주문을 추가할때는 toBuiler를 사용하여 추가해준다.

 

총 가격 구하는 메소드와 주문 취소 관리자가 주문을 확인하면 주문 상태를 완료로 바꾸는 메소드 작성.

 

OrderItem Entity

하나의 주문에 여러 상품을 담을수 있고 하나의 상품을 여러 주문에 담을수 있으므로 ManyToOne 어노테이션 사용.

orderItem에 빌더로 생성하고 주문 수량 감소 시킴.

 

OrderRepository

사용자 이메일과 페이지를 받아 사용자별 주문 목록과 갯수를 가져옴.

관리자가 볼 수있는 주문목록으로 전부 가져오고 확인되지 않은 상품 갯수도 가져온다.

OrderService

주문을 하기위해 주문한 상품의 아이디와 사용자 정보를 가져온다.

주문상품 리스트를 만들고 주문 상품에 상품과 갯수를 넣어준다.

리스트에 주문 상품을 더해준다.

주문 상품 리스트와 사용자를 파라미터로 보내 주문 객체를 만들고 저장한 후 아이디값을 반환한다.

 

OrderService

주문 목록을 가져오는 메소드이다.

간단하게 사용자의 주문과 갯수를 가져오고 주문들 중 하나의 주문에서 상품 이미지와 정보들을 orderhistdto에 저장하고 

주문이 여러개 이므로 orderhistdto를 리스트에 저장하여 반환.

 

check, cancel

관리자가 주문 확인으로 표시할때 사용

사용자가 주문을 취소할때 사용

 

관리자 주문 목록

관리자가 주문 목록을 확인하기 위해 작성. 위 사용자 주문목록 리스트에서 사용자 정보만 없을뿐 비슷함.

 

OrderHistDto

주문 내역 정보를 옮기는 dto.

날짜는 보기 편하게 포맷함.

 

OrderController

사용자가 주문 버튼을 누르면 post가 옴.

주문 정보와 bindingresult로 예외 처리

OrderController

주문 내역을 보연다. SessionUser를 사용하여 현재 사용자의 이메일을 가져온다.

페이지 시작은 0부터 10개사이즈를 가진다.

최대 페이지는 5개로 맞춤.

주문 취소

사용자와 주문했던 사용자를 비교하여 주문 취소 함.

 

일단 대략 큰틀로 설명하긴 했다.

git : https://github.com/Junyoungs7/Shopping

 

GitHub - Junyoungs7/Shopping

Contribute to Junyoungs7/Shopping development by creating an account on GitHub.

github.com