Skip to content

Commit 71cdfae

Browse files
authored
Merge pull request #48 from Team-PLAT/feat/#47/feedsPaging
[FEAT] 트랙 피드 조회 API 페이지네이션
2 parents 4df5d57 + e135eb7 commit 71cdfae

File tree

5 files changed

+43
-12
lines changed

5 files changed

+43
-12
lines changed

src/main/java/com/cabin/plat/domain/track/controller/TrackController.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
import com.cabin.plat.domain.member.entity.Member;
55
import com.cabin.plat.domain.track.dto.TrackRequest;
66
import com.cabin.plat.domain.track.dto.TrackResponse;
7+
import com.cabin.plat.domain.track.dto.TrackResponse.TrackDetail;
78
import com.cabin.plat.domain.track.service.TrackService;
89
import com.cabin.plat.global.common.BaseResponse;
910
import io.swagger.v3.oas.annotations.Operation;
1011
import io.swagger.v3.oas.annotations.tags.Tag;
1112
import lombok.RequiredArgsConstructor;
13+
import org.springframework.data.domain.Page;
14+
import org.springframework.data.domain.Pageable;
15+
import org.springframework.data.web.PageableDefault;
1216
import org.springframework.web.bind.annotation.*;
17+
1318
@RestController
1419
@RequiredArgsConstructor
1520
@RequestMapping("/tracks")
@@ -61,10 +66,13 @@ public BaseResponse<TrackResponse.TrackId> addTrack(@AuthMember Member member, @
6166
return BaseResponse.onSuccess(trackService.addTrack(member, trackUpload));
6267
}
6368

64-
@Operation(summary = "트랙 피드 조회", description = "트랙의 피드를 모두 조회한다.")
69+
@Operation(summary = "트랙 피드 조회", description = "트랙의 피드를 조회한다. 페이지네이션을 지원합니다. page 파라미터에 페이지 번호를 입력해주세요.")
6570
@GetMapping("/feeds")
66-
public BaseResponse<TrackResponse.TrackDetailList> getTrackFeeds(@AuthMember Member member) {
67-
return BaseResponse.onSuccess(trackService.getTrackFeeds(member));
71+
public BaseResponse<TrackResponse.TrackDetailList> getTrackFeeds(
72+
@AuthMember Member member,
73+
@RequestParam(defaultValue = "0") int page,
74+
@RequestParam(defaultValue = "20") int size) {
75+
return BaseResponse.onSuccess(trackService.getTrackFeeds(member, page, size));
6876
}
6977

7078
@Operation(summary = "트랙 신고", description = "트랙을 신고한다.")

src/main/java/com/cabin/plat/domain/track/repository/TrackRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.cabin.plat.domain.track.entity.Track;
44
import io.lettuce.core.dynamic.annotation.Param;
55
import java.util.List;
6+
import org.springframework.data.domain.Page;
7+
import org.springframework.data.domain.Pageable;
68
import org.springframework.data.jpa.repository.JpaRepository;
79
import org.springframework.data.jpa.repository.Query;
810

@@ -19,4 +21,5 @@ List<Track> findAllTracksWithinBounds(
1921
@Param("maxLatitude") double maxLatitude,
2022
@Param("minLongitude") double minLongitude,
2123
@Param("maxLongitude") double maxLongitude);
22-
}
24+
Page<Track> findAll(Pageable pageable);
25+
}

src/main/java/com/cabin/plat/domain/track/service/TrackService.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.cabin.plat.domain.member.entity.Member;
44
import com.cabin.plat.domain.track.dto.TrackRequest;
55
import com.cabin.plat.domain.track.dto.TrackResponse;
6-
import com.cabin.plat.domain.track.dto.TrackResponse.TrackMapList;
7-
import com.cabin.plat.global.common.BaseResponse;
86

97
public interface TrackService {
108
TrackResponse.TrackMapList getTracksByLocation(
@@ -21,7 +19,7 @@ TrackResponse.TrackMapList getTracksByLocation(
2119

2220
TrackResponse.TrackId addTrack(Member member, TrackRequest.TrackUpload trackUpload);
2321

24-
TrackResponse.TrackDetailList getTrackFeeds(Member member);
22+
TrackResponse.TrackDetailList getTrackFeeds(Member member, int page, int size);
2523

2624
TrackResponse.ReportId reportTrack(Member member, Long trackId);
2725
}

src/main/java/com/cabin/plat/domain/track/service/TrackServiceImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
import com.cabin.plat.global.exception.RestApiException;
1111
import com.cabin.plat.global.exception.errorCode.TrackErrorCode;
1212
import com.cabin.plat.global.util.geocoding.AddressInfo;
13-
import com.cabin.plat.global.util.geocoding.ApiKeyProperties;
1413
import com.cabin.plat.global.util.geocoding.ReverseGeoCoding;
14+
import java.util.ArrayList;
1515
import java.util.List;
1616
import java.util.Optional;
17-
import lombok.AllArgsConstructor;
1817
import lombok.RequiredArgsConstructor;
18+
import org.springframework.data.domain.PageRequest;
19+
import org.springframework.data.domain.Pageable;
20+
import org.springframework.data.domain.Sort;
1921
import org.springframework.stereotype.Service;
2022
import org.springframework.transaction.annotation.Transactional;
2123

@@ -109,8 +111,12 @@ public TrackResponse.TrackId addTrack(Member member, TrackRequest.TrackUpload tr
109111
}
110112

111113
@Override
112-
public TrackResponse.TrackDetailList getTrackFeeds(Member member) {
113-
List<Track> tracks = trackRepository.findAll(); // TODO: 페이지네이션 또는 친구 트랙만 불러오기
114+
public TrackResponse.TrackDetailList getTrackFeeds(Member member, int page, int size) {
115+
List<Sort.Order> sorts = new ArrayList<>();
116+
sorts.add(Sort.Order.desc("createdAt"));
117+
Pageable pageable = PageRequest.of(page, size, Sort.by(sorts));
118+
119+
List<Track> tracks = trackRepository.findAll(pageable).getContent();
114120

115121
List<TrackResponse.TrackDetail> trackDetails = tracks.stream()
116122
.map(track -> getTrackDetail(member, track))

src/test/java/com/cabin/plat/domain/track/service/TrackServiceTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,28 @@ void setUp() {
293293
Member member = members.get(0);
294294

295295
// when
296-
List<TrackDetail> trackDetails = trackService.getTrackFeeds(member).getTrackDetails();
296+
List<TrackDetail> trackDetails = trackService.getTrackFeeds(member, 0, 20).getTrackDetails();
297297

298298
// then
299299
assertThat(trackDetails).hasSize(6);
300300
}
301301

302+
@Test
303+
void 트랙_피드_페이지네이션() {
304+
// given
305+
Member member = members.get(0);
306+
307+
// when
308+
List<TrackDetail> firstPageTracks = trackService.getTrackFeeds(member, 0, 4).getTrackDetails();
309+
List<TrackDetail> secondPageTracks = trackService.getTrackFeeds(member, 1, 4).getTrackDetails();
310+
List<TrackDetail> thirdPageTracks = trackService.getTrackFeeds(member, 2, 4).getTrackDetails();
311+
312+
// then
313+
assertThat(firstPageTracks).hasSize(4);
314+
assertThat(secondPageTracks).hasSize(2);
315+
assertThat(thirdPageTracks).hasSize(0);
316+
}
317+
302318
@Test
303319
void 트랙_신고() {
304320
// given

0 commit comments

Comments
 (0)