diff --git a/src/main/java/com/example/template/domain/complaint/controller/ComplaintController.java b/src/main/java/com/example/template/domain/complaint/controller/ComplaintController.java index c98ed2f..d3254c0 100644 --- a/src/main/java/com/example/template/domain/complaint/controller/ComplaintController.java +++ b/src/main/java/com/example/template/domain/complaint/controller/ComplaintController.java @@ -39,20 +39,20 @@ public ApiResponse uploadImages( @Operation(summary = "새 민원글 작성") @PostMapping() - public ApiResponse createComplaint(@AuthenticatedMember Member member, + public ApiResponse createComplaint(@AuthenticatedMember Member member, @Valid @RequestBody ComplaintRequestDTO.CreateComplaintDTO createComplaintDTO) { return ApiResponse.onSuccess(complaintCommandService.createComplaint(member, createComplaintDTO)); } @Operation(summary = "내가 쓴 민원글 상세 조회") - @GetMapping("/{complaintId}") - ApiResponsegetComplaintDetail(@AuthenticatedMember Member member, @PathVariable("complaintId") Long complaintId){ + @GetMapping("/my-complaints/{complaintId}") + ApiResponsegetComplaintDetail(@AuthenticatedMember Member member, @PathVariable("complaintId") Long complaintId){ return ApiResponse.onSuccess(complaintQueryService.getComplaintDetail(member, complaintId)); } @Operation(summary = "내가 쓴 민원글 목록 조회") - @GetMapping() + @GetMapping("/my-complaints") ApiResponse> getComplaintList(@AuthenticatedMember Member member){ return ApiResponse.onSuccess(complaintQueryService.getComplaintList(member)); } diff --git a/src/main/java/com/example/template/domain/complaint/dto/response/ComplaintResponseDTO.java b/src/main/java/com/example/template/domain/complaint/dto/response/ComplaintResponseDTO.java index bd7d3be..f8bbf54 100644 --- a/src/main/java/com/example/template/domain/complaint/dto/response/ComplaintResponseDTO.java +++ b/src/main/java/com/example/template/domain/complaint/dto/response/ComplaintResponseDTO.java @@ -29,50 +29,62 @@ public static getStationDTO from(Station station) { } @Builder - @JsonInclude(JsonInclude.Include.NON_NULL) @Getter - public static class ComplaintDTO { + public static class ComplaintDTO{ private Long complaintId; - private String title; + private String image; + private String name; private String content; - private ComplaintType complaintType; + private String complaintType; private LocalDateTime createdAt; private LocalDateTime updatedAt; - private List images; - - public static ComplaintDTO from(Complaint complaint, List complaintImgList){ - List complaintImgURL = complaintImgList.stream() - .map(ComplaintImg::getImgUrl) - .collect(Collectors.toList()); + public static ComplaintDTO from(Complaint complaint, ComplaintImg complaintImg) { return ComplaintDTO.builder() .complaintId(complaint.getId()) - .complaintType(complaint.getComplaintType()) - .title(complaint.getTitle()) + .image(complaintImg != null ? complaintImg.getImgUrl() : null) // 이미지가 null이 아닐 경우 URL 반환, null이면 null 반환 + .name(complaint.getStation().getName()) .content(complaint.getContent()) - .images(complaintImgURL) + .complaintType(complaint.getComplaintType().getDescription()) .createdAt(complaint.getCreatedAt()) .updatedAt(complaint.getUpdatedAt()) .build(); } + } + @Builder + @Getter + public static class ComplaintDetailDTO { + private Long complaintId; + private String name; + private String address; //도로명 + private String streetNumber;//지번 + private String institutionPhone; //번호 + private String title; + private String content; + private String complaintType; + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + private List images; - //목록조회를 위해 이미지가 없는 버전 - public static ComplaintDTO from(Complaint complaint){ - return ComplaintDTO.builder() + public static ComplaintDetailDTO from(Complaint complaint, List complaintImgList){ + List complaintImgURL = complaintImgList.stream() + .map(ComplaintImg::getImgUrl) + .collect(Collectors.toList()); + return ComplaintDetailDTO.builder() .complaintId(complaint.getId()) - .complaintType(complaint.getComplaintType()) + .name(complaint.getStation().getName()) + .address(complaint.getStation().getAddress()) + .streetNumber(complaint.getStation().getStreetNumber()) + .institutionPhone(complaint.getStation().getInstitutionPhone()) .title(complaint.getTitle()) .content(complaint.getContent()) + .complaintType(complaint.getComplaintType().getDescription()) + .images(complaintImgURL) .createdAt(complaint.getCreatedAt()) .updatedAt(complaint.getUpdatedAt()) .build(); } - public static List from(List complaints) { - return complaints.stream() - .map(ComplaintDTO::from) - .collect(Collectors.toList()); - } } @Getter diff --git a/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandService.java b/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandService.java index a643293..98cbce4 100644 --- a/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandService.java +++ b/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandService.java @@ -10,5 +10,5 @@ public interface ComplaintCommandService { ComplaintResponseDTO.ComplaintImgDTO uploadImages(List images); - ComplaintResponseDTO.ComplaintDTO createComplaint(Member member, ComplaintRequestDTO.CreateComplaintDTO createComplaintDTO); + ComplaintResponseDTO.ComplaintDetailDTO createComplaint(Member member, ComplaintRequestDTO.CreateComplaintDTO createComplaintDTO); } diff --git a/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandServiceImpl.java b/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandServiceImpl.java index 1aeddf5..b23afa2 100644 --- a/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandServiceImpl.java +++ b/src/main/java/com/example/template/domain/complaint/service/ComplaintCommandServiceImpl.java @@ -67,7 +67,7 @@ public ComplaintResponseDTO.ComplaintImgDTO uploadImages(List ima } @Override - public ComplaintResponseDTO.ComplaintDTO createComplaint(Member member, ComplaintRequestDTO.CreateComplaintDTO createComplaintDTO) { + public ComplaintResponseDTO.ComplaintDetailDTO createComplaint(Member member, ComplaintRequestDTO.CreateComplaintDTO createComplaintDTO) { Station station = stationRepository.findById(createComplaintDTO.getStationId()). orElseThrow(() -> new StationException(StationErrorCode.NOT_FOUND)); Complaint complaint = ComplaintRequestDTO.CreateComplaintDTO.toEntity(createComplaintDTO, station, member); @@ -84,11 +84,8 @@ public ComplaintResponseDTO.ComplaintDTO createComplaint(Member member, Complain } Complaint savedComplaint = complaintRepository.save(complaint); + return ComplaintResponseDTO.ComplaintDetailDTO.from(savedComplaint, complaintImgs); - if(complaintImgs!=null) { - return ComplaintResponseDTO.ComplaintDTO.from(savedComplaint, complaintImgs); - } - return ComplaintResponseDTO.ComplaintDTO.from(savedComplaint); } diff --git a/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryService.java b/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryService.java index 0775fba..b893526 100644 --- a/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryService.java +++ b/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryService.java @@ -8,7 +8,7 @@ public interface ComplaintQueryService { ComplaintResponseDTO.getStationDTO getStationName(Long stationId); - ComplaintResponseDTO.ComplaintDTO getComplaintDetail(Member member, Long complaintId); + ComplaintResponseDTO.ComplaintDetailDTO getComplaintDetail(Member member, Long complaintId); List getComplaintList(Member member); } diff --git a/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryServiceImpl.java b/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryServiceImpl.java index 7abd739..f12ff43 100644 --- a/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryServiceImpl.java +++ b/src/main/java/com/example/template/domain/complaint/service/ComplaintQueryServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.stream.Collectors; @RequiredArgsConstructor @Service @@ -34,7 +35,7 @@ public ComplaintResponseDTO.getStationDTO getStationName(Long stationId) { } @Override - public ComplaintResponseDTO.ComplaintDTO getComplaintDetail(Member member, Long complaintId) { + public ComplaintResponseDTO.ComplaintDetailDTO getComplaintDetail(Member member, Long complaintId) { Complaint complaint = complaintRepository.findByIdAndMember(complaintId, member); if(complaint == null){ throw new ComplaintException(ComplaintErrorCode.COMPLAINT_NOT_FOUND); @@ -43,12 +44,18 @@ public ComplaintResponseDTO.ComplaintDTO getComplaintDetail(Member member, Long if(complaintImgList == null){ throw new ComplaintException(ComplaintErrorCode.INVALID_IMAGE_URLS); } - return ComplaintResponseDTO.ComplaintDTO.from(complaint); + return ComplaintResponseDTO.ComplaintDetailDTO.from(complaint, complaintImgList); } @Override public List getComplaintList(Member member) { List complaintList = complaintRepository.findAllByMemberId(member.getId()); - return ComplaintResponseDTO.ComplaintDTO.from(complaintList); + // 각 Complaint에 대해 이미지를 하나만 선택하여 가져오기 + return complaintList.stream().map(complaint -> { + // 해당 Complaint와 연관된 첫 번째 이미지를 가져옴 + ComplaintImg complaintImg = complaintImgRepository.findAllByComplaintId(complaint.getId()).stream().findFirst().orElse(null); + // ComplaintDTO에 이미지 정보를 포함시켜 반환 + return ComplaintResponseDTO.ComplaintDTO.from(complaint, complaintImg); + }).collect(Collectors.toList()); } }