Skip to content

Commit

Permalink
[feat] 조회수 로직 추가 및 자잘한 수정을 위한 Service 로직 추가, 수정, 그리고 viewCount 레포지토리 추가
Browse files Browse the repository at this point in the history
- 글쓴이가 자신의 글에 방문해도 조회수 늘지 않음
  • Loading branch information
junmo95 committed Jan 10, 2024
1 parent 06693a2 commit d2edd7a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.haejwo.tripcometrue.domain.triprecord.repository;

import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecord;
import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecordViewCount;
import java.time.LocalDate;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TripRecordViewCountRepository extends JpaRepository<TripRecordViewCount, Long> {

Optional<TripRecordViewCount> findByTripRecordAndDate(TripRecord tripRecord, LocalDate date);

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,24 @@
import com.haejwo.tripcometrue.domain.triprecord.dto.response.triprecord.TripRecordDetailResponseDto;
import com.haejwo.tripcometrue.domain.triprecord.dto.response.triprecord.TripRecordResponseDto;
import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecord;
import com.haejwo.tripcometrue.domain.triprecord.entity.TripRecordViewCount;
import com.haejwo.tripcometrue.domain.triprecord.exception.TripRecordNotFoundException;
import com.haejwo.tripcometrue.domain.triprecord.repository.TripRecordRepository;
import com.haejwo.tripcometrue.domain.triprecord.repository.TripRecordViewCountRepository;
import com.haejwo.tripcometrue.global.springsecurity.PrincipalDetails;
import java.time.LocalDate;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Slf4j
public class TripRecordService {

private final TripRecordRepository tripRecordRepository;
private final TripRecordViewCountRepository tripRecordViewCountRepository;

@Transactional
public TripRecordResponseDto addTripRecord(PrincipalDetails principalDetails, TripRecordRequestDto requestDto) {
Expand All @@ -28,10 +34,15 @@ public TripRecordResponseDto addTripRecord(PrincipalDetails principalDetails, Tr
return responseDto;
}

@Transactional(readOnly = true)
public TripRecordDetailResponseDto findTripRecord(Long tripRecordId) {

@Transactional
public TripRecordDetailResponseDto findTripRecord(PrincipalDetails principalDetails, Long tripRecordId) {

Long memberId = principalDetails.getMember().getId();
TripRecord findTripRecord = findTripRecordById(tripRecordId);

if(memberId != findTripRecord.getMember().getId()) { findTripRecord.incrementViewCount(); }
incrementViewCount(findTripRecord);

TripRecordDetailResponseDto responseDto = TripRecordDetailResponseDto.fromEntity(findTripRecord);

return responseDto;
Expand All @@ -52,6 +63,7 @@ public TripRecordResponseDto modifyTripRecord(PrincipalDetails principalDetails,
return responseDto;
}

@Transactional
public void removeTripRecord(PrincipalDetails principalDetails, Long tripRecordId) {

TripRecord findTripRecord = findTripRecordById(tripRecordId);
Expand All @@ -63,6 +75,29 @@ public void removeTripRecord(PrincipalDetails principalDetails, Long tripRecordI
tripRecordRepository.delete(findTripRecord);
}

@Transactional
public void incrementViewCount(TripRecord tripRecord) {

LocalDate today = LocalDate.now();

TripRecordViewCount viewCountEntity = tripRecordViewCountRepository.findByTripRecordAndDate(tripRecord, today)
.orElseGet(() -> createNewViewCount(tripRecord, today));

viewCountEntity.incrementViewCount();
tripRecordViewCountRepository.save(viewCountEntity);

}

private TripRecordViewCount createNewViewCount(TripRecord tripRecord, LocalDate today) {
return TripRecordViewCount.builder()
.date(today)
.tripRecord(tripRecord)
.viewCount(0)
.build();
}



private TripRecord findTripRecordById(Long tripRecordId) {
TripRecord findTripRecord = tripRecordRepository.findById(tripRecordId)
.orElseThrow(TripRecordNotFoundException::new);
Expand Down

0 comments on commit d2edd7a

Please sign in to comment.