-
10주차 목 1026 진행도광주인력개발원 일일포스팅(메모장) 2023. 10. 26. 10:04728x90반응형
24일에 게시물에
board list 와 write를 적당히 만들어놨다.24일 오후와 25일에는
상세보기 페이지와 조회수를 만들어봤다.
@GetMapping("/board/{id}")public String boardDetail(@PathVariable int id, Model model) {Optional<TravelBoard> boardOptional = travelBoardRepository.findById(id);if (!boardOptional.isPresent()) {// 게시글이 없는 경우의 처리// 예: 404 페이지로 리다이렉트return "redirect:/error/404";}TravelBoard board = boardOptional.get();model.addAttribute("travelBoard", board);// 조회수를 가져옵니다.
// 로그인한 사용자 정보를 가져옵니다.if (session.getAttribute("name") != null) {System.out.println("@@@@@" + 300);Member member = memberRepository.findByName((String) session.getAttribute("name"));if (member != null) {// 조회수를 증가시킵니다.addView(member, board);}}
System.out.println(board.getId());// 1int viewCount = board.getViewCount();model.addAttribute("viewCount", viewCount);
return "board/boardDetail";}
@GetMapping("/plan/{id}")public String planDetail(@PathVariable int id, Model model) {Optional<TravelPlan> planOptional = travelPlanRepository.findById(id);if (!planOptional.isPresent()) {// 게시글이 없는 경우의 처리// 예: 404 페이지로 리다이렉트return "redirect:/error/404";}TravelPlan plan = planOptional.get();model.addAttribute("travelPlan", plan);// 조회수를 가져옵니다.
// 로그인한 사용자 정보를 가져옵니다.if (session.getAttribute("name") != null) {Member member = memberRepository.findByName((String) session.getAttribute("name"));if (member != null) {// 조회수를 증가시킵니다.addView(member, plan);}}
System.out.println(plan.getId());// 1int viewCount = plan.getViewCount();model.addAttribute("viewCount", viewCount);return "board/planDetail";}
//////////////////////////////// 조회수 boardpublic void addView(Member member, TravelBoard travelBoard) {if (!isAlreadyViewedToday(member, travelBoard)) {View view = new View();view.setMember(member);view.setTravelBoard(travelBoard);viewRepository.save(view);}}
private boolean isAlreadyViewedToday(Member member, TravelBoard travelBoard) {System.out.println(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));System.out.println(LocalDateTime.now());Optional<View> views = viewRepository.findByMemberAndTravelBoardAndViewTimeBetween(member,travelBoard,LocalDateTime.now().truncatedTo(ChronoUnit.DAYS),LocalDateTime.now());System.out.println(views.isPresent());return views.isPresent();}
//////////////////////////////// 조회수 plan
public void addView(Member member, TravelPlan travelPlan) {if (!isAlreadyViewedToday(member, travelPlan)) {View view = new View();view.setMember(member);view.setTravelPlan(travelPlan);viewRepository.save(view);}}
private boolean isAlreadyViewedToday(Member member, TravelPlan travelPlan) {System.out.println(LocalDateTime.now().truncatedTo(ChronoUnit.DAYS));System.out.println(LocalDateTime.now());Optional<View> views = viewRepository.findByMemberAndTravelPlanAndViewTimeBetween(member,travelPlan,LocalDateTime.now().truncatedTo(ChronoUnit.DAYS),LocalDateTime.now());System.out.println(views.isPresent());return views.isPresent();}}이 코드는 detail과 view 를 구성한 템플릿이다.
public class View {
@Id@GeneratedValueLong id;
@ManyToOneMember member;
@ManyToOneTravelBoard travelBoard;
@ManyToOneTravelPlan travelPlan;
LocalDateTime viewTime;
@PrePersistpublic void createdAt() {this.viewTime = LocalDateTime.now().truncatedTo(ChronoUnit.HOURS);}}또 View라는 엔티티를 만들어놓고 여기서 관리를 한다.
baord라는 게시물을 갈때는 id2번처럼 boardId과 memberId의 정보를 받아 저장하게 된다.
테이블에는 시분초 까지 다 나오지만 최근 view 엔티티는 hours로 되어있어 시간까지만 저장된다.
그래서 하루가 지나지 않고 다시 같은 게시물을 보더라도 조회수가 올라가지 않게 로직을 구성했다.
하루로 설정해서 많은 조회수를 보여주지 못한당... ㅠㅠ
이렇게 조회수가 올라가는 것을 볼수있는데 뷰템플릿에
<div id="content"><div class="title1"><div><h2 id="topTitle" name="title" th:text="${travelPlan.title}"></h2></div><div class="write_date"><span name="planDate" th:text="${#temporals.format(travelPlan.planDate, 'yy년 mm월 dd일')}"></span><br><span name="name" th:text="${travelPlan.member.name}"></span></div><div class="post_area"><button type="button" class="btn_good" onclick="setLike();"><span class="ico">좋아요</span><span class="num" id="conLike"></span></button><span class="num_view"><em class="tit">조회수</em><span class="num" id="conRead">[[${#lists.size(travelPlan.views)}]]</span></span></div></div>list.size로 히스토리에서 조회기록을 가져오기 때문이다.
짜잔 ~
오늘은 게시물 좋아요 버튼을 구현하고 내일은 댓글과 대댓 그리고 추천버튼을 구현할 생각이다..
728x90반응형'광주인력개발원 일일포스팅(메모장)' 카테고리의 다른 글
11주차 일 1029 진행도 (1) 2023.10.29 10주차 금 1027 진행도 (3) 2023.10.27 10주차 화 1024 진행도 (0) 2023.10.24 9주차 금 1020 진행도 (2) 2023.10.20 9주차 수 1018 (0) 2023.10.18