diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9d1886ff..a78cf57e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -112,7 +112,7 @@ jobs: sudo docker run -d -p 9000:9000 \ --log-driver=json-file \ --log-opt max-size=20m \ - --log-opt max-file=5 \ + --log-opt max-file=5 \ -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ diff --git a/.gitignore b/.gitignore index 633f67dc..21461390 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,8 @@ out/ ### env file ### .env -/src/main/resources/application-local.yml \ No newline at end of file +/src/main/resources/application-local.yml + +### DS File ### +.DS_Store +*/.DS_Store diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index 23e92f98..bbe83b6d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -8,10 +8,11 @@ public interface PartnershipRestaurantRepository extends JpaRepository { @Query(""" - SELECT DISTINCT pr FROM PartnershipRestaurant pr - LEFT JOIN FETCH pr.partnerships p - LEFT JOIN FETCH p.partnershipCollege - LEFT JOIN FETCH p.partnershipDepartment - WHERE p.endDate is null or p.endDate >= CURRENT_DATE""") + SELECT DISTINCT pr FROM PartnershipRestaurant pr + JOIN FETCH pr.partnerships p + LEFT JOIN FETCH p.partnershipCollege + LEFT JOIN FETCH p.partnershipDepartment + WHERE p.endDate IS NULL OR p.endDate >= CURRENT_DATE + """) List findAllWithDetails(); } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index 6ddd6800..6f96af91 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -9,10 +9,10 @@ public record ReportCreateRequest( @Schema(description = "신고할 리뷰 id", example = "4") Long reviewId, - @Schema(description = "신고 타입", example = "BAD_WORD") + @Schema(description = "신고 타입", example = "NO_ASSOCIATE_CONTENT") ReportType reportType, - @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") + @Schema(description = "신고 내용", example = "리뷰 작성 취지에 맞지 않는 내용") String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 58d0a066..51edfeba 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -1,7 +1,22 @@ package ssu.eatssu.domain.report.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.review.entity.Report; +import java.time.LocalDateTime; + public interface ReportRepository extends JpaRepository { + + @Query(""" + SELECT count(r) > 0 + FROM Report r + WHERE r.user.id = :userId + AND r.review.id = :reviewId + AND r.createdDate >= :threshold +""") + boolean existsRecentReport(@Param("userId") Long userId, + @Param("reviewId") Long reviewId, + @Param("threshold") LocalDateTime threshold); } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 4105629e..929d801c 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -17,8 +17,9 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import java.time.LocalDateTime; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @RequiredArgsConstructor @Service @@ -37,6 +38,10 @@ public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest re Review review = reviewRepository.findById(request.reviewId()) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + if(reportRepository.existsRecentReport(user.getId(), review.getId(), LocalDateTime.now().minusHours(24))){ + throw new BaseException(RECENT_REPORT_ON_REVIEW); + } + Report report = Report.create(user, review, request, ReportStatus.PENDING); reportRepository.save(report); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index ddc2f1ba..ca5979cd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -39,7 +39,7 @@ public class ReviewDetail { private Integer rating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writedAt; + private LocalDate writtenAt; @Schema(description = "리뷰 내용", example = "맛있습니당") private String content; @@ -61,7 +61,7 @@ public static ReviewDetail from(Review review, Long userId) { ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) .rating(review.getRatings().getMainRating()) - .writedAt(review.getCreatedDate().toLocalDate()) + .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) .menu(new MenuIdNameLikeDto(menu.getId(),menu.getName(),likedMenuIds.contains(menu.getId()))); diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 2fb26288..eb418ff1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -31,6 +31,7 @@ public enum BaseResponseStatus { EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), + RECENT_REPORT_ON_REVIEW(false, HttpStatus.BAD_REQUEST, 40014, "24시간 이내에 동일 댓글을 신고했습니다."), /** * 401 UNAUTHORIZED 권한없음(인증 실패)