Skip to content

Commit ada88de

Browse files
committed
[Fix] dev merge
2 parents 392471f + 6d33cc9 commit ada88de

20 files changed

Lines changed: 550 additions & 160 deletions

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@ out/
4040
src/main/resources/*.sql
4141

4242
### application-dev ###
43-
src/main/resources/application-dev.yml
43+
src/main/resources/application-dev.yml
44+
45+
### env ###
46+
/env

src/main/java/boombimapi/domain/congestion/api/MemberCongestionController.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import boombimapi.domain.congestion.dto.request.CreateMemberCongestionRequest;
77
import boombimapi.domain.congestion.dto.response.CreateMemberCongestionResponse;
88
import boombimapi.global.response.BaseResponse;
9+
import io.swagger.v3.oas.annotations.Operation;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
11+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
12+
import io.swagger.v3.oas.annotations.tags.Tag;
913
import lombok.RequiredArgsConstructor;
1014
import org.springframework.http.HttpStatus;
1115
import org.springframework.http.ResponseEntity;
@@ -18,10 +22,15 @@
1822
@RestController
1923
@RequiredArgsConstructor
2024
@RequestMapping("/member-congestion")
25+
@Tag(name = "Member Congestion", description = "사용자 혼잡도 관련 API")
2126
public class MemberCongestionController {
2227

2328
private final MemberCongestionService memberCongestionService;
2429

30+
@Operation(summary = "사용자 혼잡도 생성", description = "사용자 장소에 새로운 사용자 혼잡도를 추가합니다.")
31+
@ApiResponses(value = {
32+
@ApiResponse(responseCode = "200", description = "사용자 혼잡도 생성 성공")
33+
})
2534
@PostMapping("/create")
2635
public ResponseEntity<BaseResponse<CreateMemberCongestionResponse>> createMemberCongestion(
2736
@AuthenticationPrincipal String memberId,
@@ -37,5 +46,4 @@ public ResponseEntity<BaseResponse<CreateMemberCongestionResponse>> createMember
3746
}
3847

3948

40-
4149
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package boombimapi.domain.congestion.dto.response;
2+
3+
import boombimapi.domain.congestion.entity.MemberCongestion;
4+
import java.time.LocalDateTime;
5+
6+
public record MemberCongestionItemResponse(
7+
Long memberCongestionId,
8+
String congestionLevelName,
9+
String congestionLevelMessage,
10+
LocalDateTime createdAt
11+
) {
12+
13+
public static MemberCongestionItemResponse of(
14+
MemberCongestion memberCongestion
15+
) {
16+
return new MemberCongestionItemResponse(
17+
memberCongestion.getId(),
18+
memberCongestion.getCongestionLevel().getName(),
19+
memberCongestion.getCongestionMessage(),
20+
memberCongestion.getCreatedAt()
21+
);
22+
}
23+
24+
}

src/main/java/boombimapi/domain/congestion/repository/MemberCongestionRepository.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import boombimapi.domain.place.entity.MemberPlace;
99
import org.springframework.data.repository.query.Param;
1010
import org.springframework.data.domain.Pageable;
11+
12+
import org.springframework.data.domain.Pageable;
13+
import org.springframework.data.domain.Slice;
1114
import org.springframework.data.jpa.repository.JpaRepository;
1215
import org.springframework.data.jpa.repository.Query;
1316

@@ -24,7 +27,7 @@ Optional<MemberCongestion> findFirstByMemberPlaceIdAndExpiresAtAfterOrderByCreat
2427
);
2528

2629
@Query("""
27-
SELECT COUNT(mc)\s
30+
SELECT COUNT(mc)
2831
FROM MemberCongestion mc
2932
WHERE mc.memberPlace.id = :placeId
3033
AND CAST(mc.createdAt AS DATE) = CURRENT_DATE
@@ -35,4 +38,15 @@ AND CAST(mc.createdAt AS DATE) = CURRENT_DATE
3538
Optional<MemberCongestion> findTop1ByMemberPlaceIdOrderByCreatedAtDesc(Long placeId);
3639

3740

41+
Slice<MemberCongestion> findByMemberPlaceIdOrderByIdDesc(
42+
Long memberPlaceId,
43+
Pageable pageable
44+
);
45+
46+
Slice<MemberCongestion> findByMemberPlaceIdAndIdLessThanOrderByIdDesc(
47+
Long memberPlaceId,
48+
Long cursor,
49+
Pageable pageable
50+
);
51+
3852
}

src/main/java/boombimapi/domain/favorite/api/FavoriteController.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import boombimapi.domain.favorite.dto.response.AddFavoriteResponse;
88
import boombimapi.domain.favorite.dto.response.GetFavoriteResponse;
99
import boombimapi.global.response.BaseResponse;
10+
import io.swagger.v3.oas.annotations.Operation;
11+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
12+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
13+
import io.swagger.v3.oas.annotations.tags.Tag;
1014
import java.util.List;
1115
import lombok.RequiredArgsConstructor;
1216
import org.springframework.http.HttpStatus;
@@ -23,10 +27,15 @@
2327
@RestController
2428
@RequiredArgsConstructor
2529
@RequestMapping("/favorite")
30+
@Tag(name = "Favorite", description = "사용자 즐겨찾기 관련 API")
2631
public class FavoriteController {
2732

2833
private final FavoriteService favoriteService;
2934

35+
@Operation(summary = "즐겨찾기 추가", description = "해당 장소를 즐겨찾기에 추가합니다.")
36+
@ApiResponses(value = {
37+
@ApiResponse(responseCode = "200", description = "즐겨찾기 추가 성공")
38+
})
3039
@PostMapping
3140
public ResponseEntity<BaseResponse<AddFavoriteResponse>> addFavorite(
3241
@AuthenticationPrincipal String memberId,
@@ -41,6 +50,10 @@ public ResponseEntity<BaseResponse<AddFavoriteResponse>> addFavorite(
4150
);
4251
}
4352

53+
@Operation(summary = "즐겨찾기 삭제", description = "해당 장소를 즐겨찾기에서 삭제합니다.")
54+
@ApiResponses(value = {
55+
@ApiResponse(responseCode = "200", description = "즐겨찾기 삭제 성공")
56+
})
4457
@DeleteMapping
4558
public ResponseEntity<BaseResponse<Void>> deleteFavorite(
4659
@AuthenticationPrincipal String memberId,
@@ -57,6 +70,10 @@ public ResponseEntity<BaseResponse<Void>> deleteFavorite(
5770
);
5871
}
5972

73+
@Operation(summary = "즐겨찾기 조회", description = "사용자가 즐겨찾기한 장소들의 최신 혼잡도를 조회합니다.")
74+
@ApiResponses(value = {
75+
@ApiResponse(responseCode = "200", description = "사용자 즐겨찾기 최신 혼잡도 조회 성공")
76+
})
6077
@GetMapping
6178
public ResponseEntity<BaseResponse<List<GetFavoriteResponse>>> getFavorites(
6279
@AuthenticationPrincipal String memberId

src/main/java/boombimapi/domain/place/api/MemberPlaceController.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,27 @@
55
import boombimapi.domain.place.application.MemberPlaceService;
66
import boombimapi.domain.place.dto.request.ResolveMemberPlaceRequest;
77
import boombimapi.domain.place.dto.request.ViewportRequest;
8-
import boombimapi.domain.place.dto.response.ResolveMemberPlaceResponse;
8+
import boombimapi.domain.place.dto.response.member.GetMemberPlaceDetailResponse;
9+
import boombimapi.domain.place.dto.response.member.ResolveMemberPlaceResponse;
910
import boombimapi.domain.place.dto.response.node.ViewportNodeResponse;
1011
import boombimapi.global.response.BaseResponse;
1112
import io.swagger.v3.oas.annotations.Operation;
1213
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1314
import io.swagger.v3.oas.annotations.responses.ApiResponses;
1415
import io.swagger.v3.oas.annotations.tags.Tag;
16+
import jakarta.validation.constraints.Max;
17+
import jakarta.validation.constraints.Min;
1518
import java.util.List;
1619
import lombok.RequiredArgsConstructor;
1720
import org.springframework.http.HttpStatus;
1821
import org.springframework.http.ResponseEntity;
22+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
23+
import org.springframework.web.bind.annotation.GetMapping;
24+
import org.springframework.web.bind.annotation.PathVariable;
1925
import org.springframework.web.bind.annotation.PostMapping;
2026
import org.springframework.web.bind.annotation.RequestBody;
2127
import org.springframework.web.bind.annotation.RequestMapping;
28+
import org.springframework.web.bind.annotation.RequestParam;
2229
import org.springframework.web.bind.annotation.RestController;
2330

2431
@RestController
@@ -52,15 +59,45 @@ public ResponseEntity<BaseResponse<ResolveMemberPlaceResponse>> resolveMemberPla
5259
})
5360
@PostMapping
5461
public ResponseEntity<BaseResponse<List<ViewportNodeResponse>>> getMemberPlacesInViewport(
62+
@AuthenticationPrincipal String memberId,
5563
@RequestBody ViewportRequest request
5664
) {
5765
return ResponseEntity.ok(
5866
BaseResponse.of(
5967
HttpStatus.OK,
6068
GET_MEMBER_PLACES_IN_VIEWPORT_SUCCESS,
61-
memberPlaceService.getViewportNodes(request)
69+
memberPlaceService.getViewportNodes(memberId, request)
6270
)
6371
);
6472
}
6573

74+
@Operation(summary = "특정 사용자 장소 상세 조회", description = "특정 사용자 장소를 상세 조회하여 해당 장소에 작성된 혼잡도들을 확인합니다.")
75+
@ApiResponses(value = {
76+
@ApiResponse(responseCode = "200", description = "특정 사용자 장소 상세 조회 성공")
77+
})
78+
@GetMapping("/{memberPlaceId}")
79+
public ResponseEntity<BaseResponse<GetMemberPlaceDetailResponse>> getMemberPlaceDetail(
80+
@PathVariable Long memberPlaceId,
81+
@RequestParam(required = false) @Min(1) @Max(100) Integer size,
82+
@RequestParam(required = false) Long cursor,
83+
@AuthenticationPrincipal String memberId
84+
) {
85+
86+
GetMemberPlaceDetailResponse memberPlaceDetailResponse = memberPlaceService.getMemberPlaceDetail(
87+
memberId,
88+
memberPlaceId,
89+
size,
90+
cursor
91+
);
92+
93+
return ResponseEntity.ok(
94+
BaseResponse.of(
95+
HttpStatus.OK,
96+
GET_MEMBER_PLACE_DETAIL_SUCCESS,
97+
memberPlaceDetailResponse
98+
)
99+
);
100+
101+
}
102+
66103
}

0 commit comments

Comments
 (0)