diff --git a/build.gradle.kts b/build.gradle.kts index dc4cc1d..e865456 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,6 +38,8 @@ dependencies { implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0") implementation("io.jsonwebtoken:jjwt-api:0.12.3") + implementation("org.springframework.boot:spring-boot-starter-batch") + testImplementation("org.springframework.batch:spring-batch-test") runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3") runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3") compileOnly("org.projectlombok:lombok") diff --git a/src/main/java/com/back/domain/cocktail/comment/entity/CocktailComment.java b/src/main/java/com/back/domain/cocktail/comment/entity/CocktailComment.java index 5f0a5e2..967b8b0 100644 --- a/src/main/java/com/back/domain/cocktail/comment/entity/CocktailComment.java +++ b/src/main/java/com/back/domain/cocktail/comment/entity/CocktailComment.java @@ -15,10 +15,7 @@ import java.time.LocalDateTime; @Entity -@Table( - name = "cocktail_comment", - uniqueConstraints = @UniqueConstraint(columnNames = {"cocktail_id", "user_id"}) // 사용자 1개 댓글 제한 -) +@Table(name = "cocktail_comment") @Getter @EntityListeners(AuditingEntityListener.class) @NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) diff --git a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java index 758012e..ad74711 100644 --- a/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java +++ b/src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java @@ -1,6 +1,7 @@ package com.back.domain.cocktail.comment.repository; import com.back.domain.cocktail.comment.entity.CocktailComment; +import com.back.domain.post.comment.enums.CommentStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -13,5 +14,5 @@ public interface CocktailCommentRepository extends JpaRepository findTop10ByCocktailIdAndIdLessThanOrderByIdDesc(Long cocktailId, Long lastId); - boolean existsByCocktailIdAndUserId(Long cocktailId, Long id); + boolean existsByCocktailIdAndUserIdAndStatusNot(Long cocktailId, Long id, CommentStatus status); } diff --git a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java index 8cf0d20..fbb2d9a 100644 --- a/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java +++ b/src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java @@ -32,7 +32,12 @@ public CocktailCommentResponseDto createCocktailComment(Long cocktailId, Cocktai .orElseThrow(() -> new IllegalArgumentException("칵테일이 존재하지 않습니다. id=" + cocktailId)); // 사용자당 댓글 1개 제한 체크 - boolean exists = cocktailCommentRepository.existsByCocktailIdAndUserId(cocktailId, user.getId()); + boolean exists = cocktailCommentRepository.existsByCocktailIdAndUserIdAndStatusNot( + cocktailId, + user.getId(), + CommentStatus.DELETED // DELETED 상태는 제외하고 검사 + ); + if (exists) { throw new IllegalArgumentException("이미 댓글을 작성하셨습니다."); }