Skip to content

Commit 8b1f577

Browse files
committed
feat: 지도 범위 내 마커형 다이어리 조회 API 구현
1 parent 7ae32a5 commit 8b1f577

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed

src/main/java/com/example/log4u/domain/diary/repository/CustomDiaryRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.example.log4u.domain.diary.SortType;
1010
import com.example.log4u.domain.diary.VisibilityType;
1111
import com.example.log4u.domain.diary.entity.Diary;
12+
import com.example.log4u.domain.map.dto.response.DiaryMarkerResponseDto;
1213

1314
public interface CustomDiaryRepository {
1415
Page<Diary> searchDiaries(
@@ -24,4 +25,6 @@ Slice<Diary> findByUserIdAndVisibilityInAndCursorId(
2425
Long cursorId,
2526
Pageable pageable
2627
);
28+
29+
List<DiaryMarkerResponseDto> findDiariesInBounds(double south, double north, double west, double east);
2730
}

src/main/java/com/example/log4u/domain/diary/repository/CustomDiaryRepositoryImpl.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,26 @@
77
import org.springframework.data.domain.Pageable;
88
import org.springframework.data.domain.Slice;
99
import org.springframework.data.domain.SliceImpl;
10+
import org.springframework.stereotype.Repository;
1011
import org.springframework.util.StringUtils;
1112

1213
import com.example.log4u.domain.diary.SortType;
1314
import com.example.log4u.domain.diary.VisibilityType;
1415
import com.example.log4u.domain.diary.entity.Diary;
1516
import com.example.log4u.domain.diary.entity.QDiary;
17+
import com.example.log4u.domain.map.dto.response.DiaryMarkerResponseDto;
1618
import com.querydsl.core.types.OrderSpecifier;
19+
import com.querydsl.core.types.Projections;
1720
import com.querydsl.core.types.dsl.BooleanExpression;
1821
import com.querydsl.jpa.impl.JPAQuery;
1922
import com.querydsl.jpa.impl.JPAQueryFactory;
2023

2124
import lombok.RequiredArgsConstructor;
2225

26+
@Repository
2327
@RequiredArgsConstructor
2428
public class CustomDiaryRepositoryImpl implements CustomDiaryRepository {
29+
2530
private final JPAQueryFactory queryFactory;
2631

2732
@Override
@@ -132,4 +137,28 @@ private Slice<Diary> checkAndCreateSlice(List<Diary> content, Pageable pageable)
132137

133138
return new SliceImpl<>(content, pageable, hasNext);
134139
}
140+
141+
@Override
142+
public List<DiaryMarkerResponseDto> findDiariesInBounds(double south, double north, double west, double east) {
143+
QDiary d = QDiary.diary;
144+
145+
return queryFactory
146+
.select(Projections.constructor(DiaryMarkerResponseDto.class,
147+
d.diaryId,
148+
d.title,
149+
d.thumbnailUrl,
150+
d.likeCount,
151+
d.latitude,
152+
d.longitude,
153+
d.createdAt
154+
))
155+
.from(d)
156+
.where(
157+
d.visibility.eq(VisibilityType.PUBLIC),
158+
d.latitude.between(south, north),
159+
d.longitude.between(west, east)
160+
)
161+
.orderBy(d.createdAt.asc())
162+
.fetch();
163+
}
135164
}

src/main/java/com/example/log4u/domain/map/controller/MapController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.web.bind.annotation.RestController;
1010

1111
import com.example.log4u.domain.map.dto.response.DiaryClusterResponseDto;
12+
import com.example.log4u.domain.map.dto.response.DiaryMarkerResponseDto;
1213
import com.example.log4u.domain.map.service.MapService;
1314

1415
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,4 +34,15 @@ public ResponseEntity<List<DiaryClusterResponseDto>> getDiaryClusters(
3334
List<DiaryClusterResponseDto> clusters = mapService.getDiaryClusters(south, north, west, east, zoom);
3435
return ResponseEntity.ok(clusters);
3536
}
37+
38+
@GetMapping("/diaries/marker")
39+
public ResponseEntity<List<DiaryMarkerResponseDto>> getDiariesInBounds(
40+
@RequestParam double south,
41+
@RequestParam double north,
42+
@RequestParam double west,
43+
@RequestParam double east
44+
) {
45+
List<DiaryMarkerResponseDto> diaries = mapService.getDiariesInBounds(south, north, west, east);
46+
return ResponseEntity.ok(diaries);
47+
}
3648
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.example.log4u.domain.map.dto.response;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record DiaryMarkerResponseDto(
6+
Long diaryId,
7+
String title,
8+
String thumbnailUrl,
9+
Long likeCount,
10+
Double lat,
11+
Double lon,
12+
LocalDateTime createdAt
13+
14+
) {
15+
}

src/main/java/com/example/log4u/domain/map/service/MapService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import org.springframework.stereotype.Service;
66
import org.springframework.transaction.annotation.Transactional;
77

8+
import com.example.log4u.domain.diary.repository.DiaryRepository;
89
import com.example.log4u.domain.map.dto.response.DiaryClusterResponseDto;
10+
import com.example.log4u.domain.map.dto.response.DiaryMarkerResponseDto;
911
import com.example.log4u.domain.map.entity.SidoAreasDiaryCount;
1012
import com.example.log4u.domain.map.entity.SiggAreasDiaryCount;
1113
import com.example.log4u.domain.map.repository.SidoAreasDiaryCountRepository;
@@ -23,6 +25,7 @@ public class MapService {
2325
private final SidoAreasDiaryCountRepository sidoAreasDiaryCountRepository;
2426
private final SiggAreasRepository siggAreasRepository;
2527
private final SiggAreasDiaryCountRepository siggAreasDiaryCountRepository;
28+
private final DiaryRepository diaryRepository;
2629

2730
@Transactional(readOnly = true)
2831
public List<DiaryClusterResponseDto> getDiaryClusters(double south, double north, double west, double east, int zoom) {
@@ -56,4 +59,10 @@ public void increaseRegionDiaryCount(Double lat, Double lon) {
5659
siggAreasDiaryCountRepository.save(count);
5760
});
5861
}
62+
63+
@Transactional(readOnly = true)
64+
public List<DiaryMarkerResponseDto> getDiariesInBounds(double south, double north, double west, double east) {
65+
return diaryRepository.findDiariesInBounds(south, north, west, east);
66+
}
67+
5968
}

0 commit comments

Comments
 (0)