From b20ae57c17af7896bf7ebe47c949ebc215a053e7 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:15:16 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feature:=20=ED=94=BC=EB=93=9C=20=EC=8B=A0?= =?UTF-8?q?=EA=B3=A0=20=EA=B8=B0=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/api/ReportController.java | 37 +++++++++++++ .../report/application/ReportService.java | 55 +++++++++++++++++++ .../domain/report/dao/ReportRepository.java | 6 ++ .../stonebed/domain/report/domain/Report.java | 48 ++++++++++++++++ .../domain/report/domain/ReportReason.java | 31 +++++++++++ .../report/dto/request/ReportRequest.java | 7 +++ .../dto/response/ReportReasonResponse.java | 3 + .../stonebed/global/error/ErrorCode.java | 5 +- 8 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/dao/ReportRepository.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java diff --git a/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java new file mode 100644 index 00000000..1856cda2 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java @@ -0,0 +1,37 @@ +package com.depromeet.stonebed.domain.report.api; + +import com.depromeet.stonebed.domain.report.application.ReportService; +import com.depromeet.stonebed.domain.report.dto.request.ReportRequest; +import com.depromeet.stonebed.domain.report.dto.response.ReportReasonResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "8. [신고]", description = "신고 기능 관련 API입니다.") +@RestController +@RequestMapping("/reports") +@RequiredArgsConstructor +public class ReportController { + private final ReportService reportService; + + @Operation(summary = "신고 사유 목록 조회", description = "신고 사유 목록을 가져옵니다.") + @GetMapping("/reasons") + public ResponseEntity> getReportReasons() { + List reasons = reportService.getReportReasons(); + return ResponseEntity.ok(reasons); + } + + @Operation(summary = "신고하기", description = "특정 피드를 신고한다.") + @PostMapping + public ResponseEntity reportFeed(@RequestBody ReportRequest reportRequest) { + reportService.reportFeed(reportRequest); + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java new file mode 100644 index 00000000..5e8d8320 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java @@ -0,0 +1,55 @@ +package com.depromeet.stonebed.domain.report.application; + +import com.depromeet.stonebed.domain.member.domain.Member; +import com.depromeet.stonebed.domain.missionRecord.dao.MissionRecordRepository; +import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord; +import com.depromeet.stonebed.domain.report.dao.ReportRepository; +import com.depromeet.stonebed.domain.report.domain.Report; +import com.depromeet.stonebed.domain.report.domain.ReportReason; +import com.depromeet.stonebed.domain.report.dto.request.ReportRequest; +import com.depromeet.stonebed.domain.report.dto.response.ReportReasonResponse; +import com.depromeet.stonebed.global.error.ErrorCode; +import com.depromeet.stonebed.global.error.exception.CustomException; +import com.depromeet.stonebed.global.util.MemberUtil; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class ReportService { + private final ReportRepository reportRepository; + private final MissionRecordRepository missionRecordRepository; + private final MemberUtil memberUtil; + + public void reportFeed(ReportRequest reportRequest) { + final Member member = memberUtil.getCurrentMember(); + + MissionRecord missionRecord = + missionRecordRepository + .findById(reportRequest.recordId()) + .orElseThrow(() -> new CustomException(ErrorCode.MISSION_RECORD_NOT_FOUND)); + + ReportReason reportReason = ReportReason.fromName(reportRequest.reason()); + + Report report = + Report.builder() + .missionRecord(missionRecord) + .member(member) + .reportReason(reportReason) + .details(reportRequest.details()) + .build(); + + reportRepository.save(report); + } + + public List getReportReasons() { + return Arrays.stream(ReportReason.values()) + .map(reason -> new ReportReasonResponse(reason.name(), reason.getValue())) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dao/ReportRepository.java b/src/main/java/com/depromeet/stonebed/domain/report/dao/ReportRepository.java new file mode 100644 index 00000000..fb70a0e3 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/dao/ReportRepository.java @@ -0,0 +1,6 @@ +package com.depromeet.stonebed.domain.report.dao; + +import com.depromeet.stonebed.domain.report.domain.Report; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReportRepository extends JpaRepository {} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java new file mode 100644 index 00000000..8bd412c5 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java @@ -0,0 +1,48 @@ +package com.depromeet.stonebed.domain.report.domain; + +import com.depromeet.stonebed.domain.member.domain.Member; +import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(name = "feed_report") +public class Report { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mission_record_id", nullable = false) + private MissionRecord missionRecord; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + private String reason; + + private String details; + + @Builder + public Report( + MissionRecord missionRecord, Member member, ReportReason reportReason, String details) { + this.missionRecord = missionRecord; + this.member = member; + this.reason = reportReason.getValue(); + this.details = details; + } +} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java new file mode 100644 index 00000000..f3cfd73b --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java @@ -0,0 +1,31 @@ +package com.depromeet.stonebed.domain.report.domain; + +import com.depromeet.stonebed.global.error.ErrorCode; +import com.depromeet.stonebed.global.error.exception.CustomException; +import java.util.Arrays; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ReportReason { + HARASSMENT_OR_ABUSE("사기 또는 사칭"), + NOT_A_PET("반려동물이 아님"), + VIOLENCE_HARASSMENT_OR_HATE("폭력, 혐오 또는 학대"), + ADVERTISEMENT_SPAM("광고, 홍보, 스팸"), + ADULT_CONTENT("성인용 콘텐츠"), + OTHER("기타"); + + private final String value; + + public static ReportReason fromName(String name) { + return Arrays.stream(values()) + .filter(reason -> reason.name().equals(name)) + .findFirst() + .orElseThrow(() -> new CustomException(ErrorCode.INVALID_REPORT_REASON)); + } + + public static String getValueFromName(String name) { + return fromName(name).getValue(); + } +} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java new file mode 100644 index 00000000..e4237f99 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java @@ -0,0 +1,7 @@ +package com.depromeet.stonebed.domain.report.dto.request; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + +public record ReportRequest( + @NotNull Long recordId, @NotNull String reason, @Size(max = 500) String details) {} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java new file mode 100644 index 00000000..c2796cbb --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java @@ -0,0 +1,3 @@ +package com.depromeet.stonebed.domain.report.dto.response; + +public record ReportReasonResponse(String enumValue, String description) {} diff --git a/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java b/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java index 9d40cd91..680815cc 100644 --- a/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java +++ b/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java @@ -57,7 +57,10 @@ public enum ErrorCode { // fcm INVALID_FCM_TOKEN(HttpStatus.BAD_REQUEST, "FCM 토큰값이 비어있습니다."), FAILED_TO_FIND_FCM_TOKEN(HttpStatus.NOT_FOUND, "해당 FCM 토큰을 찾을 수 없습니다."), - NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 알림을 찾을 수 없습니다."); + NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 알림을 찾을 수 없습니다."), + + // report + INVALID_REPORT_REASON(HttpStatus.NOT_FOUND, "해당 신고 목록을 찾을 수 없습니다."); private final HttpStatus httpStatus; private final String message; } From 2eaeaeb78c512fc6b580a5cd4ad335deafb9c2c0 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:16:49 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=ED=95=84=EC=9A=94=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depromeet/stonebed/domain/report/domain/ReportReason.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java index f3cfd73b..345289b9 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java @@ -24,8 +24,4 @@ public static ReportReason fromName(String name) { .findFirst() .orElseThrow(() -> new CustomException(ErrorCode.INVALID_REPORT_REASON)); } - - public static String getValueFromName(String name) { - return fromName(name).getValue(); - } } From 60b067d83ec2c771be10786706b03d9f822e124d Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:24:08 +0900 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20Report=20=EC=97=94=ED=8B=B0=ED=8B=B0?= =?UTF-8?q?=EC=97=90=20BaseTimeEntity=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/depromeet/stonebed/domain/report/domain/Report.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java index 8bd412c5..d28f7f96 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java @@ -1,5 +1,6 @@ package com.depromeet.stonebed.domain.report.domain; +import com.depromeet.stonebed.domain.common.BaseTimeEntity; import com.depromeet.stonebed.domain.member.domain.Member; import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord; import jakarta.persistence.Entity; @@ -19,7 +20,7 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "feed_report") -public class Report { +public class Report extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 92b44336e44c3af3fcb6a87811e729cc66299610 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:40:36 +0900 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20/reports/=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depromeet/stonebed/domain/report/api/ReportController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java index 1856cda2..d85798b3 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java @@ -22,7 +22,7 @@ public class ReportController { private final ReportService reportService; @Operation(summary = "신고 사유 목록 조회", description = "신고 사유 목록을 가져옵니다.") - @GetMapping("/reasons") + @GetMapping public ResponseEntity> getReportReasons() { List reasons = reportService.getReportReasons(); return ResponseEntity.ok(reasons); From d12366dfc6ded8fd21e9a4042772b751f5cd15aa Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:43:08 +0900 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20ErrorCode=20message=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/depromeet/stonebed/global/error/ErrorCode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java b/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java index 680815cc..dd76c07f 100644 --- a/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java +++ b/src/main/java/com/depromeet/stonebed/global/error/ErrorCode.java @@ -60,7 +60,7 @@ public enum ErrorCode { NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 알림을 찾을 수 없습니다."), // report - INVALID_REPORT_REASON(HttpStatus.NOT_FOUND, "해당 신고 목록을 찾을 수 없습니다."); + INVALID_REPORT_REASON(HttpStatus.NOT_FOUND, "해당 신고 사유를 찾을 수 없습니다."); private final HttpStatus httpStatus; private final String message; } From 8aa4ec77573aefa3d4d426969e24aeb70421f4b1 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:55:27 +0900 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=EC=A0=95=EC=A0=81=20=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/application/ReportService.java | 7 +------ .../stonebed/domain/report/domain/Report.java | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java index 5e8d8320..61cca79f 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java @@ -37,12 +37,7 @@ public void reportFeed(ReportRequest reportRequest) { ReportReason reportReason = ReportReason.fromName(reportRequest.reason()); Report report = - Report.builder() - .missionRecord(missionRecord) - .member(member) - .reportReason(reportReason) - .details(reportRequest.details()) - .build(); + Report.createReport(missionRecord, member, reportReason, reportRequest.details()); reportRepository.save(report); } diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java index d28f7f96..b103ce67 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java @@ -39,11 +39,20 @@ public class Report extends BaseTimeEntity { private String details; @Builder - public Report( - MissionRecord missionRecord, Member member, ReportReason reportReason, String details) { + private Report(MissionRecord missionRecord, Member member, String reason, String details) { this.missionRecord = missionRecord; this.member = member; - this.reason = reportReason.getValue(); + this.reason = reason; this.details = details; } + + public static Report createReport( + MissionRecord missionRecord, Member member, ReportReason reportReason, String details) { + return Report.builder() + .missionRecord(missionRecord) + .member(member) + .reason(reportReason.getValue()) + .details(details) + .build(); + } } From 3954f2963a6505b6c3fc2eed07b574413cd6d549 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 14:58:27 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20DTO=EC=97=90=20Swagger=20Schema=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/dto/request/ReportRequest.java | 13 ++++++++++++- .../report/dto/response/ReportReasonResponse.java | 7 ++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java index e4237f99..bf16859d 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java @@ -1,7 +1,18 @@ package com.depromeet.stonebed.domain.report.dto.request; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; +@Schema(description = "신고 요청 정보") public record ReportRequest( - @NotNull Long recordId, @NotNull String reason, @Size(max = 500) String details) {} + @Schema(description = "신고할 대상 기록의 ID", example = "123", required = true) @NotNull + Long recordId, + @Schema(description = "신고 사유 (ENUM 값)", example = "HARASSMENT", required = true) @NotNull + String reason, + @Schema( + description = "신고 상세 내용 (최대 500자)", + example = "해당 게시물은 부적절한 내용을 포함하고 있습니다.", + maxLength = 500) + @Size(max = 500) + String details) {} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java index c2796cbb..c93c46ff 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java @@ -1,3 +1,8 @@ package com.depromeet.stonebed.domain.report.dto.response; -public record ReportReasonResponse(String enumValue, String description) {} +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "신고 사유 응답 정보") +public record ReportReasonResponse( + @Schema(description = "신고 사유 ENUM 값", example = "HARASSMENT") String enumValue, + @Schema(description = "신고 사유 설명", example = "사기 또는 사칭") String description) {} From c85787b06c012502ff01c327a19bf718b35031a1 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 22:15:34 +0900 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20reportReason=EC=9D=84=20request?= =?UTF-8?q?=EC=97=90=EC=84=9C=20String=EC=9C=BC=EB=A1=9C=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/api/ReportController.java | 13 ++------- .../report/application/ReportService.java | 16 ++--------- .../stonebed/domain/report/domain/Report.java | 6 ++--- .../domain/report/domain/ReportReason.java | 27 ------------------- .../report/dto/request/ReportRequest.java | 2 +- 5 files changed, 8 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java diff --git a/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java index d85798b3..aa9c13d8 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/api/ReportController.java @@ -2,13 +2,11 @@ import com.depromeet.stonebed.domain.report.application.ReportService; import com.depromeet.stonebed.domain.report.dto.request.ReportRequest; -import com.depromeet.stonebed.domain.report.dto.response.ReportReasonResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -21,17 +19,10 @@ public class ReportController { private final ReportService reportService; - @Operation(summary = "신고 사유 목록 조회", description = "신고 사유 목록을 가져옵니다.") - @GetMapping - public ResponseEntity> getReportReasons() { - List reasons = reportService.getReportReasons(); - return ResponseEntity.ok(reasons); - } - @Operation(summary = "신고하기", description = "특정 피드를 신고한다.") @PostMapping public ResponseEntity reportFeed(@RequestBody ReportRequest reportRequest) { reportService.reportFeed(reportRequest); - return ResponseEntity.ok().build(); + return ResponseEntity.status(HttpStatus.CREATED).build(); } } diff --git a/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java index 61cca79f..ba2f24a0 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/application/ReportService.java @@ -5,15 +5,10 @@ import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord; import com.depromeet.stonebed.domain.report.dao.ReportRepository; import com.depromeet.stonebed.domain.report.domain.Report; -import com.depromeet.stonebed.domain.report.domain.ReportReason; import com.depromeet.stonebed.domain.report.dto.request.ReportRequest; -import com.depromeet.stonebed.domain.report.dto.response.ReportReasonResponse; import com.depromeet.stonebed.global.error.ErrorCode; import com.depromeet.stonebed.global.error.exception.CustomException; import com.depromeet.stonebed.global.util.MemberUtil; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,17 +29,10 @@ public void reportFeed(ReportRequest reportRequest) { .findById(reportRequest.recordId()) .orElseThrow(() -> new CustomException(ErrorCode.MISSION_RECORD_NOT_FOUND)); - ReportReason reportReason = ReportReason.fromName(reportRequest.reason()); - Report report = - Report.createReport(missionRecord, member, reportReason, reportRequest.details()); + Report.createReport( + missionRecord, member, reportRequest.reason(), reportRequest.details()); reportRepository.save(report); } - - public List getReportReasons() { - return Arrays.stream(ReportReason.values()) - .map(reason -> new ReportReasonResponse(reason.name(), reason.getValue())) - .collect(Collectors.toList()); - } } diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java index b103ce67..80d962b1 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/domain/Report.java @@ -38,7 +38,7 @@ public class Report extends BaseTimeEntity { private String details; - @Builder + @Builder(access = AccessLevel.PRIVATE) private Report(MissionRecord missionRecord, Member member, String reason, String details) { this.missionRecord = missionRecord; this.member = member; @@ -47,11 +47,11 @@ private Report(MissionRecord missionRecord, Member member, String reason, String } public static Report createReport( - MissionRecord missionRecord, Member member, ReportReason reportReason, String details) { + MissionRecord missionRecord, Member member, String reportReason, String details) { return Report.builder() .missionRecord(missionRecord) .member(member) - .reason(reportReason.getValue()) + .reason(reportReason) .details(details) .build(); } diff --git a/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java b/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java deleted file mode 100644 index 345289b9..00000000 --- a/src/main/java/com/depromeet/stonebed/domain/report/domain/ReportReason.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.depromeet.stonebed.domain.report.domain; - -import com.depromeet.stonebed.global.error.ErrorCode; -import com.depromeet.stonebed.global.error.exception.CustomException; -import java.util.Arrays; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum ReportReason { - HARASSMENT_OR_ABUSE("사기 또는 사칭"), - NOT_A_PET("반려동물이 아님"), - VIOLENCE_HARASSMENT_OR_HATE("폭력, 혐오 또는 학대"), - ADVERTISEMENT_SPAM("광고, 홍보, 스팸"), - ADULT_CONTENT("성인용 콘텐츠"), - OTHER("기타"); - - private final String value; - - public static ReportReason fromName(String name) { - return Arrays.stream(values()) - .filter(reason -> reason.name().equals(name)) - .findFirst() - .orElseThrow(() -> new CustomException(ErrorCode.INVALID_REPORT_REASON)); - } -} diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java index bf16859d..fe0be098 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/request/ReportRequest.java @@ -8,7 +8,7 @@ public record ReportRequest( @Schema(description = "신고할 대상 기록의 ID", example = "123", required = true) @NotNull Long recordId, - @Schema(description = "신고 사유 (ENUM 값)", example = "HARASSMENT", required = true) @NotNull + @Schema(description = "신고 사유", example = "사기 또는 사칭", required = true) @NotNull String reason, @Schema( description = "신고 상세 내용 (최대 500자)", From fbe4a3904d5a65551d6fc2b8fc0a8f5d4ef3ed42 Mon Sep 17 00:00:00 2001 From: Park Yun Chan Date: Mon, 30 Sep 2024 22:16:09 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20response=20example=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/dto/response/ReportReasonResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java index c93c46ff..6c682e75 100644 --- a/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java +++ b/src/main/java/com/depromeet/stonebed/domain/report/dto/response/ReportReasonResponse.java @@ -4,5 +4,5 @@ @Schema(description = "신고 사유 응답 정보") public record ReportReasonResponse( - @Schema(description = "신고 사유 ENUM 값", example = "HARASSMENT") String enumValue, + @Schema(description = "신고 사유", example = "HARASSMENT") String enumValue, @Schema(description = "신고 사유 설명", example = "사기 또는 사칭") String description) {}