Skip to content

Commit f251708

Browse files
authored
Merge pull request #78 from YAPP-Github/feat/T3-199
[T3-199] 제보 기록 상세 조회 API
2 parents 50ed6d0 + d101d10 commit f251708

5 files changed

Lines changed: 84 additions & 11 deletions

File tree

src/main/java/bitnagil/bitnagil_backend/report/controller/ReportController.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
import bitnagil.bitnagil_backend.global.response.CustomResponseDto;
55
import bitnagil.bitnagil_backend.report.controller.spec.ReportSpec;
66
import bitnagil.bitnagil_backend.report.request.ReportRegisterRequest;
7+
import bitnagil.bitnagil_backend.report.response.ReportDetailInfoResponse;
78
import bitnagil.bitnagil_backend.report.response.ReportInfoResponse;
89
import bitnagil.bitnagil_backend.report.service.ReportService;
910
import bitnagil.bitnagil_backend.user.domain.User;
10-
import io.swagger.v3.oas.annotations.media.Content;
11-
import io.swagger.v3.oas.annotations.media.ExampleObject;
12-
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1311
import lombok.RequiredArgsConstructor;
1412
import org.springframework.web.bind.annotation.*;
1513

@@ -33,6 +31,13 @@ public CustomResponseDto<ReportInfoResponse> getAllReportInfo(@CurrentUser User
3331
return CustomResponseDto.from(reportService.getAllReportInfo(user));
3432
}
3533

34+
// 제보 상세 조회 API
35+
@GetMapping("/{reportId}")
36+
public CustomResponseDto<ReportDetailInfoResponse> getReportDetailInfo(@CurrentUser User user,
37+
@PathVariable Long reportId) {
38+
return CustomResponseDto.from(reportService.getReportDetailInfo(user, reportId));
39+
}
40+
3641
/* 추후에 변경을 고려해서 소스만 남겨놓음
3742
// 제보 파일 저장 API
3843
@PutMapping(value = "/{reportId}/images")

src/main/java/bitnagil/bitnagil_backend/report/controller/spec/ReportSpec.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import bitnagil.bitnagil_backend.global.response.CustomResponseDto;
55
import bitnagil.bitnagil_backend.global.swagger.ApiTags;
66
import bitnagil.bitnagil_backend.report.request.ReportRegisterRequest;
7+
import bitnagil.bitnagil_backend.report.response.ReportDetailInfoResponse;
78
import bitnagil.bitnagil_backend.report.response.ReportInfoResponse;
89
import bitnagil.bitnagil_backend.user.domain.User;
910
import io.swagger.v3.oas.annotations.Operation;
@@ -13,6 +14,7 @@
1314
import io.swagger.v3.oas.annotations.tags.Tag;
1415

1516
import org.springframework.web.bind.annotation.GetMapping;
17+
import org.springframework.web.bind.annotation.PathVariable;
1618
import org.springframework.web.bind.annotation.RequestBody;
1719

1820
import java.util.List;
@@ -24,12 +26,19 @@ public interface ReportSpec {
2426
@Content(mediaType = "application/json", examples = @ExampleObject(name = "성공 예시", value =
2527
"{\n \"code\": \"OK\",\n \"message\": \"등록되었습니다.\",\n \"data\": 1\n}")))
2628
@Operation(summary = "제보등록",
27-
description = "회원이 제보를 등록합니다.")
28-
CustomResponseDto<Long> registerReport(User user, @RequestBody ReportRegisterRequest request);
29+
description = "회원이 제보를 등록합니다.\n\n"
30+
+ "발급된 presigned url 전체를 reportImageUrl에 담아서 보내주세요.\n\n"
31+
+ "queryParam은 빼고 담아주세요.")
32+
CustomResponseDto<Long> registerReport(User user, ReportRegisterRequest request);
2933

3034
@Operation(summary = "전체 제보 목록 조회",
3135
description = "전체 제보 목록을 조회합니다.")
32-
CustomResponseDto<ReportInfoResponse> getAllReportInfo(@CurrentUser User user);
36+
CustomResponseDto<ReportInfoResponse> getAllReportInfo(User user);
37+
38+
@Operation(summary = "제보 기록 상세 조회",
39+
description = "제보 기록 상세 정보를 조회합니다.")
40+
CustomResponseDto<ReportDetailInfoResponse> getReportDetailInfo(User user, Long reportId);
41+
3342

3443
/* 추후에 변경을 고려해서 소스만 남겨놓음
3544
@Operation(summary = "제보 이미지 등록",

src/main/java/bitnagil/bitnagil_backend/report/repository/ReportRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package bitnagil.bitnagil_backend.report.repository;
22

33
import java.util.List;
4+
import java.util.Optional;
45

56
import bitnagil.bitnagil_backend.report.domain.Report;
67
import bitnagil.bitnagil_backend.user.domain.User;
@@ -12,4 +13,6 @@
1213
public interface ReportRepository extends JpaRepository<Report, Long> {
1314

1415
List<Report> findByUser(User user);
16+
17+
Optional<Report> findByReportIdAndUser(Long reportId, User user);
1518
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package bitnagil.bitnagil_backend.report.response;
2+
3+
import java.util.List;
4+
5+
import bitnagil.bitnagil_backend.report.domain.enums.ReportCategory;
6+
import bitnagil.bitnagil_backend.report.domain.enums.ReportStatus;
7+
import io.swagger.v3.oas.annotations.media.Schema;
8+
import lombok.AllArgsConstructor;
9+
import lombok.Builder;
10+
import lombok.Getter;
11+
12+
@Getter
13+
@AllArgsConstructor
14+
@Builder
15+
public class ReportDetailInfoResponse {
16+
17+
@Schema(description = "현재 제보 상태",
18+
example = "IN_PROGRESS")
19+
private ReportStatus reportStatus;
20+
21+
@Schema(description = "제보 명",
22+
example = "가로등 불 꺼짐")
23+
private String reportTitle;
24+
25+
@Schema(description = "제보 내용",
26+
example = "용산역인데 가로등 불이 안들어와요")
27+
private String reportContent;
28+
29+
@Schema(description = "제보 카테고리",
30+
example = "TRANSPORTATION")
31+
private ReportCategory reportCategory;
32+
33+
@Schema(description = "제보 위치",
34+
example = "서울시 강남구 삼성동")
35+
private String reportLocation;
36+
37+
@Schema(description = "제보 이미지 URL 리스트",
38+
example = "[\"https://example.com/report/image1.jpg\", \"https://example.com/report/image2.jpg\"]")
39+
private List<String> reportImageUrls;
40+
}

src/main/java/bitnagil/bitnagil_backend/report/service/ReportService.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import bitnagil.bitnagil_backend.report.domain.enums.ReportStatus;
77
import bitnagil.bitnagil_backend.report.repository.ReportRepository;
88
import bitnagil.bitnagil_backend.report.request.ReportRegisterRequest;
9+
import bitnagil.bitnagil_backend.report.response.ReportDetailInfoResponse;
910
import bitnagil.bitnagil_backend.report.response.ReportInfo;
1011
import bitnagil.bitnagil_backend.report.response.ReportInfoResponse;
1112
import bitnagil.bitnagil_backend.routineInfoV2.domain.RoutineInfoV2;
@@ -65,20 +66,35 @@ public ReportInfoResponse getAllReportInfo(User user) {
6566
.build();
6667

6768
List<ReportInfo> reportInfos;
68-
if (reportInfoMap.containsKey(reportDate)) {
69-
reportInfos = reportInfoMap.get(reportDate);
69+
if (reportInfoMap.containsKey(reportDate)) { // 제보 날짜에 대한 이미 제보 기록이 있는 경우
70+
reportInfos = reportInfoMap.get(reportDate); // 기존 제보 기록 정의
7071

71-
} else {
72+
} else { // 제보 날짜에 대한 제보 기록이 없는 경우
7273
reportInfos = new ArrayList<>();
7374
}
74-
reportInfos.add(reportInfo);
75-
reportInfoMap.put(reportDate, reportInfos);
7675

76+
reportInfos.add(reportInfo); // reportDate에 대한 ReportInfo를 추가
77+
reportInfoMap.put(reportDate, reportInfos);
7778
}
7879

7980
return new ReportInfoResponse(reportInfoMap);
8081
}
8182

83+
@Transactional(readOnly = true)
84+
public ReportDetailInfoResponse getReportDetailInfo(User user, Long reportId) {
85+
Report report = reportRepository.findByReportIdAndUser(reportId, user).orElseThrow(
86+
() -> new CustomException(ErrorCode.NOT_FOUND_REPORT));
87+
88+
return ReportDetailInfoResponse.builder()
89+
.reportStatus(report.getReportStatus())
90+
.reportTitle(report.getReportTitle())
91+
.reportContent(report.getReportContent())
92+
.reportCategory(report.getReportCategory())
93+
.reportLocation(report.getReportLocation())
94+
.reportImageUrls(report.getReportImageUrls())
95+
.build();
96+
}
97+
8298
/* 추후에 변경을 고려해서 소스만 남겨놓음
8399
@Transactional
84100
public void updateImages(Long reportId, List<String> urls) {

0 commit comments

Comments
 (0)