New World
[해외공구관리사이트] 주문 - 조회(내 주문서와 내 프로젝트의 주문서) & 삭제 본문
주문서를 조회하는 페이지 기능
1. 프로젝트의 상태 정보가 제대로 노출되는지 확인
2. 주문한 시간 노출 확인
3. view 버튼 시, 프로젝트 상세 화면 이동
4. 연필 1 => 배송, 연필2 => 주문서 수정 화면, 삭제 => 주문서 삭제
controller
ㄴ OrderController
회원 정보를 보내며 주문서 페이지를 호출한다.
// 조회
@RequestMapping("/orderByMy")
public String orderMyList(HttpSession httpSession, Model model) {
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
return "sample/order/order-mylist";
}
API
ㄴ OrderApiController
내 주문서가 제대로 노출되는지 확인한다.
@GetMapping("/api/order/myorder")
public List<OrderByMyDto> orderByMy(@SessionAttribute("mSession") Long nowLoginMemberNo) {
List<Order> orderByMy = orderService.findMyOrder(memberService.myInfo(nowLoginMemberNo));
List<OrderByMyDto> collect = orderByMy.stream()
.map(o -> new OrderByMyDto(o.getNo(), o.getOrderStatus(), o.getDate(), o.getPhotoUrl(),
o.getProject().getNo()))
.collect(Collectors.toList());
return collect;
}
Service
ㄴ OrderService
ㄴ OrderServiceImpl
서버에서 내 주문서를 찾아 프론트로 넘겨준다.
@Override
@Transactional
public List<Order> findMyOrder(Member member) {
try {
return orderRepository.findMyOrder(member);
} catch (Exception e) {
return null;
}
}
Repository
ㄴ OrderRepository
서버에서 회원으로 주문서를 찾아준다.
public List<Order> findMyOrder(Member member) {
return em.createQuery("select o from Order o where o.member =: member", Order.class)
.setParameter("member", member)
.getResultList();
}
주문서를 조회하는 페이지 기능
1. 프로젝트의 상태 정보가 제대로 노출되는지 확인
2. 주문한 시간 노출 확인
3. view 버튼 시, 프로젝트 상세 화면 이동
4. 연필=>배송 페이지로 이동, 삭제 => 주문서 삭제
controller
ㄴ OrderController
// 내 프로젝트의 주문서
@RequestMapping("/orderByMyProject")
public String orderMyProjectList(HttpSession httpSession, Model model) {
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
return "sample/order/order-myproject";
}
API
ㄴ OrderApiController
내 프로젝트에 주문서가 있는지 찾는다.
// 내 프로젝트의 주문서
@GetMapping("/api/order/myproject")
public List<OrderByMyDto> orderByProject(@SessionAttribute("mSession") Long nowLoginMemberNo) {
List<Order> orderByMy = orderService.findMyProject(memberService.myInfo(nowLoginMemberNo));
List<OrderByMyDto> collect = orderByMy.stream()
.map(o -> new OrderByMyDto(o.getNo(), o.getOrderStatus(), o.getDate(), o.getPhotoUrl(),
o.getProject().getNo()))
.collect(Collectors.toList());
return collect;
}
Service
ㄴ OrderService
ㄴ OrderServiceImpl
찾은 주문서들을 리스트로 저장해 프론트로 뿌려주기 위해 Api로 전달한다.
@Override
public List<Order> findMyProject(Member member) {
List<Order> orders = orderRepository.findMyProject(member);
if (orders != null) {
return orders;
} else {
throw new IllegalStateException("주문서가 없습니다.");
}
}
controller
ㄴ OrderController
회원을 찾고 주문서 번호를 넘겨준다.
// 삭제
@GetMapping("/api/order/cancel/{no}")
public String deleteMember(@SessionAttribute("mSession") Member member,
@PathVariable("no") Long orderNo, HttpSession httpSession, Model model) {
model.addAttribute("nowLoginMember", memberController.modelMember(httpSession));
orderService.delete(orderNo, member);
return "redirect:/orderByMyProject";
}
API
ㄴ OrderApiController
Controller 과 동일하게 현재 로그인한 정보와 주문서 정보를 넘겨준다.
// 삭제
@GetMapping("/api/order/edit/{no}")
public void updateMemberV2(@SessionAttribute("mSession") Long nowLoginMemberNo,
@PathVariable("no") Long orderNo, @RequestBody @Valid UpdateOrderRequest request) {
Member nowLoginMember = memberService.myInfo(nowLoginMemberNo);
orderService.delete(orderNo, nowLoginMember);
}
Service
ㄴ OrderService
ㄴ OrderServiceImpl
주문서를 등록한 회원이 현재 로그인한 사람이 맞는지 확인하고 삭제해준다. 만약 삭제하는 사람이 프로젝트를 만든 사람이라면 프로젝트 삭제로 들어가 캐쉬인지 계좌인지 확인하고 그에 맞는 로직이 수행된다.
@Override
@Transactional
public void delete(Long no, Member nowLoginMember) {
Order order = findOne(no);
order.setDate(LocalDateTime.now());
order.setOrderStatus(OrderStatus.CANCEL);
List<Order> orders = new ArrayList<>();
orders.add(0, order);
if (order.getMember() == nowLoginMember || order.getProject().getMember() == nowLoginMember) {
deleteByProject(orders, order.getProject());
}
}
'Project > old' 카테고리의 다른 글
[해외공구관리사이트] 캐쉬 - 적립 & 내역 조회 (0) | 2022.09.06 |
---|---|
[해외공구관리사이트] 주문 - 수정 (0) | 2022.09.06 |
[해외공구관리사이트] 주문 - 저장 (0) | 2022.09.06 |
[해외공구관리사이트] 프로젝트 - 조회 (일반 & 상세 & 회원) (0) | 2022.09.06 |
[해외공구관리사이트] 프로젝트 - 수정 & 삭제 (0) | 2022.09.06 |