-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: (#164) 신고 엔티티, 레포지토리 구현 * feat: (#164) 게시글 신고 기능 구현 * refactor: (#164) 도메인으로 로직 이동, 및 예외 추가, 함수 분리 * test: (#164) Report의 repository, service 테스트 추가 * feat: (#164) 닉네임 신고 기능 구현 * refactor: (#164) 닉네임 getter 추가 * test: (#164) 닉네임 신고 기능에 대한 검증 추가 * chore: (#164) swagger 어노테이션 추가 * test: (#164) 컨트롤러 신고 검증 추가 * refactor: (#164) nested로 신고 기능 묶기 * refactor: (#164) Report 엔티티 클래스에 컬럼 복합 인덱스 설정 * refactor: (#164) 신고에 대한 비즈니스 로직을 어플리케이션 계층으로 이동 * refactor: (#164) enum타입으로 request받기, ReportService 클래스의 메서드 분리, 중복제거 * refactor: (#164) Report 클래스 reason 필드 추가 * refactor: (#164) NumberGenerator, NicknameNumberGenerator 삭제 * refactor: (#164) 신고 횟수에 대한 비즈니스 로직을 어플리케이션 계층으로 이동 * chore: (#164) conflict 해결 완료 * chore: (#164) conflict 해결 완료
- Loading branch information
Showing
47 changed files
with
1,257 additions
and
849 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 0 additions & 12 deletions
12
backend/src/main/java/com/votogether/domain/member/entity/NicknameNumberGenerator.java
This file was deleted.
Oops, something went wrong.
7 changes: 0 additions & 7 deletions
7
backend/src/main/java/com/votogether/domain/member/entity/NumberGenerator.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
backend/src/main/java/com/votogether/domain/report/controller/ReportController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package com.votogether.domain.report.controller; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.report.dto.ReportRequest; | ||
import com.votogether.domain.report.service.ReportService; | ||
import com.votogether.global.jwt.Auth; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponse; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponses; | ||
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RequiredArgsConstructor | ||
@RestController | ||
public class ReportController { | ||
|
||
private final ReportService reportService; | ||
|
||
@Operation(summary = "신고 기능", description = "게시글, 댓글, 닉네임을 신고한다.") | ||
@ApiResponses({ | ||
@ApiResponse(responseCode = "200", description = "신고 성공"), | ||
@ApiResponse(responseCode = "400", description = "올바르지 않은 요청"), | ||
@ApiResponse(responseCode = "404", description = "존재하지 않는 신고 대상") | ||
}) | ||
@PostMapping("/report") | ||
public ResponseEntity<Void> report(@Valid @RequestBody final ReportRequest request, @Auth final Member member) { | ||
reportService.report(member, request); | ||
return ResponseEntity.ok().build(); | ||
} | ||
|
||
} |
19 changes: 19 additions & 0 deletions
19
backend/src/main/java/com/votogether/domain/report/dto/ReportRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.votogether.domain.report.dto; | ||
|
||
import com.votogether.domain.report.entity.ReportType; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import jakarta.validation.constraints.NotBlank; | ||
import jakarta.validation.constraints.NotNull; | ||
|
||
@Schema(description = "신고 요청") | ||
public record ReportRequest( | ||
@Schema(description = "신고유형", example = "POST") | ||
ReportType type, | ||
@Schema(description = "신고대상ID", example = "1") | ||
@NotNull(message = "대상 ID값은 빈 값일 수 없습니다.") | ||
Long id, | ||
@Schema(description = "신고 사유", example = "불건전한 닉네임") | ||
@NotBlank(message = "신고 이유는 빈 값이거나 공백으로만 이루어질 수 없습니다.") | ||
String reason | ||
) { | ||
} |
63 changes: 63 additions & 0 deletions
63
backend/src/main/java/com/votogether/domain/report/entity/Report.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package com.votogether.domain.report.entity; | ||
|
||
import com.votogether.domain.common.BaseEntity; | ||
import com.votogether.domain.member.entity.Member; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.EnumType; | ||
import jakarta.persistence.Enumerated; | ||
import jakarta.persistence.FetchType; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.Index; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.Table; | ||
import jakarta.persistence.UniqueConstraint; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
@Table( | ||
uniqueConstraints = {@UniqueConstraint(columnNames = {"member_id", "reportType", "targetId"})}, | ||
indexes = {@Index(columnList = "reportType, targetId")} | ||
) | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@Getter | ||
@Entity | ||
public class Report extends BaseEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Long id; | ||
|
||
@ManyToOne(fetch = FetchType.LAZY) | ||
@JoinColumn(name = "member_id", nullable = false) | ||
private Member member; | ||
|
||
@Enumerated(value = EnumType.STRING) | ||
@Column(length = 10, nullable = false) | ||
private ReportType reportType; | ||
|
||
@Column(nullable = false) | ||
private Long targetId; | ||
|
||
@Column(nullable = false, length = 50) | ||
private String reason; | ||
|
||
@Builder | ||
private Report( | ||
final Member member, | ||
final ReportType reportType, | ||
final Long targetId, | ||
final String reason | ||
) { | ||
this.member = member; | ||
this.reportType = reportType; | ||
this.targetId = targetId; | ||
this.reason = reason; | ||
} | ||
|
||
} |
10 changes: 10 additions & 0 deletions
10
backend/src/main/java/com/votogether/domain/report/entity/ReportType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.votogether.domain.report.entity; | ||
|
||
public enum ReportType { | ||
|
||
POST, | ||
COMMENT, | ||
NICKNAME, | ||
; | ||
|
||
} |
27 changes: 27 additions & 0 deletions
27
backend/src/main/java/com/votogether/domain/report/exception/ReportExceptionType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.votogether.domain.report.exception; | ||
|
||
import com.votogether.exception.ExceptionType; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public enum ReportExceptionType implements ExceptionType { | ||
|
||
REPORT_MY_POST(1200, "자신의 게시글은 신고할 수 없습니다."), | ||
ALREADY_HIDDEN_POST(1201, "이미 블라인드 처리된 글입니다."), | ||
DUPLICATE_POST_REPORT(1202, "하나의 글에 대해서 중복하여 신고할 수 없습니다."), | ||
REPORT_MY_COMMENT(1203, "자신의 댓글은 신고할 수 없습니다."), | ||
ALREADY_HIDDEN_COMMENT(1204, "이미 블라인드 처리된 댓글입니다."), | ||
DUPLICATE_COMMENT_REPORT(1205, "하나의 댓글에 대해서 중복하여 신고할 수 없습니다."), | ||
REPORT_MY_NICKNAME(1206, "자신의 닉네임은 신고할 수 없습니다."), | ||
DUPLICATE_NICKNAME_REPORT(1207, "하나의 닉네임에 대해서 중복하여 신고할 수 없습니다."), | ||
; | ||
|
||
private final int code; | ||
private final String message; | ||
|
||
ReportExceptionType(final int code, final String message) { | ||
this.code = code; | ||
this.message = message; | ||
} | ||
|
||
} |
19 changes: 19 additions & 0 deletions
19
backend/src/main/java/com/votogether/domain/report/repository/ReportRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.votogether.domain.report.repository; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.report.entity.Report; | ||
import com.votogether.domain.report.entity.ReportType; | ||
import java.util.Optional; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface ReportRepository extends JpaRepository<Report, Long> { | ||
|
||
int countByReportTypeAndTargetId(final ReportType reportType, final Long targetId); | ||
|
||
Optional<Report> findByMemberAndReportTypeAndTargetId( | ||
final Member member, | ||
final ReportType reportType, | ||
final Long targetId | ||
); | ||
|
||
} |
Oops, something went wrong.