New World

[해외공구관리사이트] 주문 - 조회(내 주문서와 내 프로젝트의 주문서) & 삭제 본문

Project/old

[해외공구관리사이트] 주문 - 조회(내 주문서와 내 프로젝트의 주문서) & 삭제

hyeovi 2022. 9. 6. 20:10
728x90
반응형

주문서를 조회하는 페이지 기능

 

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());
        }
    }
반응형
Comments