diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendRepository.java index 49041b8c..c72c3873 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendRepository.java @@ -1,5 +1,6 @@ package com.blackcompany.eeos.target.application.repository; +import com.blackcompany.eeos.target.application.model.AttendModel; import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.persistence.AttendEntity; import java.time.LocalDateTime; @@ -28,4 +29,6 @@ void updateAttendStatusByProgramId( List findByProgramIdsAndMemberId(List programIds, Long memberId); List findByPenaltyPointSum(LocalDateTime startDate, LocalDateTime endDate, Long limit); + + List findMyAttendList(Long memberId, LocalDateTime startDate, LocalDateTime endDate); } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java index 2049a246..7f18b1f8 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java @@ -213,31 +213,35 @@ public PageResponse findMyAttendInfo( Long memberId = RequestScope.getMemberId(); + Sort.Order order = Sort.Order.desc("createdDate"); + Pageable pageable = PageRequest.of(page - 1, size, Sort.by(order)); + // 필요한 정보 : ProgramModel , AttendModel, MemberId - Page pages = - programDateRangeService.getPrograms(startDate, endDate, size, page - 1); + Page myAttend = + attendRepository.findAllByMemberIdAndCreatedDateGreaterThan( + memberId, new Timestamp(startDate), new Timestamp(endDate), pageable); Page responses; - if (!pages.isEmpty()) { + if (!myAttend.isEmpty()) { responses = new PageImpl<>( - pages + myAttend.stream() + .map(attendEntityConverter::from) .map( - program -> { - AttendModel attendModel = - attendRepository - .findByProgramIdAndMemberId(program.getId(), memberId) - .map(attendEntityConverter::from) + attendModel -> { + ProgramModel program = + programRepository + .findById(attendModel.getProgramId()) + .map(programEntityConverter::from) .orElse(null); - if (attendModel == null) return null; + if (program == null) return null; return attendInfoWithProgramConverter.from(attendModel, program); }) .filter(Objects::nonNull) - .stream() .toList(), - pages.getPageable(), - pages.getTotalElements()); + myAttend.getPageable(), + myAttend.getTotalElements()); return new PageResponse<>(responses); } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java index 5587c3d8..6fcc21b1 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java @@ -2,8 +2,11 @@ import com.blackcompany.eeos.target.application.model.AttendStatus; import jakarta.persistence.LockModeType; +import java.sql.Timestamp; import java.util.List; import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Modifying; @@ -54,4 +57,12 @@ List findTop5ByProgramIdAndStatusOrderByRankAsc( "SELECT a FROM AttendEntity a WHERE a.programId IN :programIds AND a.memberId=:memberId AND a.isDeleted=false") List findByProgramIdsAndMemberId( @Param("programIds") List programIds, @Param("memberId") Long memberId); + + @Query( + "SELECT a FROM AttendEntity a WHERE a.memberId = :memberId AND a.isDeleted = false AND a.createdDate > :startDate AND a.createdDate < :endDate") + Page findAllByMemberIdAndCreatedDateGreaterThan( + @Param("memberId") Long memberId, + @Param("startDate") Timestamp startDate, + @Param("endDate") Timestamp endDate, + Pageable pageable); }