포인트.drawio

포인트.drawio.png

PoinController

컨트롤러

@RequestMapping(value = "/pointList.do", method = RequestMethod.GET)
	public String pointList(HttpSession session, Model model) {
		// 세션에서 MemberDomain 객체를 가져옴
		MemberDomain member = (MemberDomain) session.getAttribute("member");

		if (member != null) {
			// 객체에서 memberId 추출
			String memberId = member.getMemberId();
			PointDomain point = pointService.getPointByMemberId(memberId);
			List<PointDomain> plusHistory = pointService.getPointPlusHistory(memberId);
			List<PointDomain> minusHistory = pointService.getPointMinusHistory(memberId);
			List<PointDomain> reviewPoint = pointService.getSelectPointReview(memberId);
			List<PointDomain> newGood = pointService.getNewMembergood(memberId);

			// 통합 리스트
			List<PointDomain> totalHistory = new ArrayList<>();

			// plus 내역 > 공통 필드에 매핑
			for (PointDomain pd : plusHistory) {
				pd.setHistoryDate(pd.getOrderJoinDate());
				pd.setHistoryType("[구매확정]");
				pd.setHistoryContent(pd.getProductName());
				pd.setPointChange("+" + pd.getProductPoint() + " P");
				totalHistory.add(pd);
			}

			// minus 내역 > 공통 필드에 매핑
			for (PointDomain pd : minusHistory) {
				pd.setHistoryDate(pd.getOrderDate());
				pd.setHistoryType("[포인트 사용]");
				pd.setHistoryContent(pd.getProductName());
				pd.setPointChange("-" + pd.getProductPoint() + " P");
				totalHistory.add(pd);
			}

			// 리뷰 작성 내역 > 공통 필드에 매핑
			for (PointDomain pd : reviewPoint) {
				pd.setHistoryDate(pd.getReviewUpdated());
				pd.setHistoryType("[리뷰작성]");
				// 리뷰 내용이 10자 이상이면 자르고 '...'
				String contents = pd.getReviewContents();
				if (contents == null) { // null 체크
					contents = "";	// 리뷰 작성시 리뷰내용 없으면 공백처리
				} else if (contents.length() > 20) {
					contents = contents.substring(0, 20) + "...";
				}
				pd.setHistoryContent(contents);
				pd.setPointChange("+150 P");
				totalHistory.add(pd);
			}

			// 회원가입 내역 > 공통 필드에 매핑
			for (PointDomain pd : newGood) {
				pd.setHistoryDate(pd.getMemberJoindate());
				pd.setHistoryType("[회원가입]");
				pd.setHistoryContent("회원가입");
				pd.setPointChange("+1000 P");
				totalHistory.add(pd);
			}

			// totalHistory를 historyDate 기준으로 내림차순 정렬
			Collections.sort(totalHistory, new Comparator<PointDomain>() {
				@Override
				public int compare(PointDomain o1, PointDomain o2) {
					// 날짜가 null일 가능성이 없다면 바로 compareTo
					return o2.getHistoryDate().compareTo(o1.getHistoryDate());
					// 최신 날짜가 먼저 오도록 내림차순
				}
			});

			model.addAttribute("point", point);
			model.addAttribute("plusHistory", plusHistory);
			model.addAttribute("minusHistory", minusHistory);
			model.addAttribute("reviewPoint", reviewPoint);
			model.addAttribute("newGood", newGood);
			model.addAttribute("totalHistory", totalHistory); // 통합 리스트
		} else {
			return "redirect:/member/loginForm.do";
		}
		return "/mypage/point/pointList";
	}

PointService

서비스 계층

	// 로그인 조회
	@Override
	public PointDomain getPointByMemberId(String memberId) {
		return pointDAO.selectPointByMemberId(memberId);
	}

	// 구매내역 +
	@Override
	public List<PointDomain> getPointPlusHistory(String memberId) {
		return pointDAO.selectPointPlusHistory(memberId);
	}

	// 포인트 -
	@Override
	public List<PointDomain> getPointMinusHistory(String memberId) {
		return pointDAO.selectPointMinusHistory(memberId);
	}

	// 리뷰 작성시 +150P
	@Override
	public List<PointDomain> getSelectPointReview(String memberId) {
		return pointDAO.selectPointReview(memberId);
	}

	// 회원가입 +1000P
	@Override
	public List<PointDomain> getNewMembergood(String memberId) {
		return pointDAO.newMembergood(memberId);
	}

PointDAO , point.xml

DAO 및 MyBatis