diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index 2105ab6..42f5bb7 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -1,3 +1,3 @@ -FROM openjdk:17-jdk-slim +FROM eclipse-temurin:17-jdk COPY app.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] \ No newline at end of file diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/entity/KindergartenInternshipReview.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/entity/KindergartenInternshipReview.java index 4bf7adf..8e118d7 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/entity/KindergartenInternshipReview.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/entity/KindergartenInternshipReview.java @@ -4,6 +4,7 @@ import com.onebyone.kindergarten.domain.kindergatens.entity.Kindergarten; import com.onebyone.kindergarten.domain.user.entity.User; import com.onebyone.kindergarten.global.common.BaseEntity; +import com.onebyone.kindergarten.global.enums.ReportStatus; import com.onebyone.kindergarten.global.enums.ReviewStatus; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -32,7 +33,10 @@ public class KindergartenInternshipReview extends BaseEntity { private Kindergarten kindergarten; // 유치원 @Enumerated(EnumType.STRING) - private ReviewStatus status = ReviewStatus.ACCEPTED; + private ReviewStatus reviewStatus = ReviewStatus.ACCEPTED; + + @Enumerated(EnumType.STRING) + private ReportStatus reportStatus = ReportStatus.YET; @Column(name = "work_type", nullable = false, columnDefinition = "varchar(255) default ''") private String workType; // 근무 형태 @@ -88,4 +92,9 @@ public void markAsDeleted() { this.updatedAt = LocalDateTime.now(); this.deletedAt = LocalDateTime.now(); } + + public void updateStatus(ReportStatus status) { + this.updatedAt = LocalDateTime.now(); + this.reportStatus = status; + } } \ No newline at end of file diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/repository/KindergartenInternshipReviewRepository.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/repository/KindergartenInternshipReviewRepository.java index 43bbf57..9dc63e5 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/repository/KindergartenInternshipReviewRepository.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/repository/KindergartenInternshipReviewRepository.java @@ -18,7 +18,7 @@ public interface KindergartenInternshipReviewRepository extends JpaRepository { boolean existsByUserAndKindergarten(User user, Kindergarten kindergarten); - List findByKindergartenAndStatus(Kindergarten kindergarten, ReviewStatus status); + List findByKindergartenAndReviewStatus(Kindergarten kindergarten, ReviewStatus status); @Query("SELECT new com.onebyone.kindergarten.domain.kindergartenInternshipReview.dto.InternshipReviewDTO(" + "r.id, u.id, u.nickname, k.id, k.name, r.oneLineComment, " + @@ -30,7 +30,7 @@ public interface KindergartenInternshipReviewRepository extends JpaRepository findReviewsWithUserInfo( @Param("kindergartenId") Long kindergartenId, @@ -49,7 +49,7 @@ Page findReviewsWithUserInfo( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.user.id = :userId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.deletedAt IS NULL " + "ORDER BY r.createdAt DESC") Page findMyReviews( @@ -68,7 +68,7 @@ Page findMyReviews( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.workEnvironmentScore = :score " + "AND r.deletedAt IS NULL") Page findByWorkEnvironmentScore( @@ -88,7 +88,7 @@ Page findByWorkEnvironmentScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.learningSupportScore = :score " + "AND r.deletedAt IS NULL") Page findByLearningSupportScore( @@ -108,7 +108,7 @@ Page findByLearningSupportScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.instructionTeacherScore = :score " + "AND r.deletedAt IS NULL") Page findByInstructionTeacherScore( @@ -128,7 +128,7 @@ Page findByInstructionTeacherScore( "FROM kindergarten_internship_review r " + "JOIN r.user u " + "JOIN r.kindergarten k " + - "WHERE r.status = :reviewStatus " + + "WHERE r.reviewStatus = :reviewStatus " + "AND r.deletedAt IS NULL") Page findAllReviewsWithUserInfo( @Param("reviewStatus") ReviewStatus reviewStatus, diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/service/KindergartenInternshipReviewService.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/service/KindergartenInternshipReviewService.java index 2b41eff..ee4f7a8 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/service/KindergartenInternshipReviewService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenInternshipReview/service/KindergartenInternshipReviewService.java @@ -56,7 +56,7 @@ public Kindergarten createInternshipReview(CreateInternshipReviewRequestDTO requ .learningSupportScore(request.getLearningSupportScore()) .instructionTeacherComment(request.getInstructionTeacherComment()) .instructionTeacherScore(request.getInstructionTeacherScore()) - .status(ReviewStatus.ACCEPTED) + .reviewStatus(ReviewStatus.ACCEPTED) .likeCount(0) .shareCount(0) .build(); diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/entity/KindergartenWorkReview.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/entity/KindergartenWorkReview.java index 14db83e..8c76158 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/entity/KindergartenWorkReview.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/entity/KindergartenWorkReview.java @@ -4,6 +4,7 @@ import com.onebyone.kindergarten.global.common.BaseEntity; import com.onebyone.kindergarten.domain.kindergatens.entity.Kindergarten; import com.onebyone.kindergarten.domain.user.entity.User; +import com.onebyone.kindergarten.global.enums.ReportStatus; import com.onebyone.kindergarten.global.enums.ReviewStatus; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -32,7 +33,10 @@ public class KindergartenWorkReview extends BaseEntity { private Kindergarten kindergarten; // 유치원 @Enumerated(EnumType.STRING) - private ReviewStatus status = ReviewStatus.ACCEPTED; + private ReviewStatus reviewStatus = ReviewStatus.ACCEPTED; + + @Enumerated(EnumType.STRING) + private ReportStatus reportStatus = ReportStatus.YET; @Column(name = "work_type", nullable = false, columnDefinition = "varchar(255) default ''") private String workType; // 근무 형태 @@ -108,4 +112,9 @@ public void markAsDeleted() { this.updatedAt = LocalDateTime.now(); this.deletedAt = LocalDateTime.now(); } + + public void updateStatus(ReportStatus status) { + this.updatedAt = LocalDateTime.now(); + this.reportStatus = status; + } } \ No newline at end of file diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/repository/KindergartenWorkReviewRepository.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/repository/KindergartenWorkReviewRepository.java index afc5411..becb32d 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/repository/KindergartenWorkReviewRepository.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/repository/KindergartenWorkReviewRepository.java @@ -16,7 +16,7 @@ public interface KindergartenWorkReviewRepository extends JpaRepository { boolean existsByUserAndKindergarten(User user, Kindergarten kindergarten); - List findByKindergartenAndStatus(Kindergarten kindergarten, ReviewStatus status); + List findByKindergartenAndReviewStatus(Kindergarten kindergarten, ReviewStatus status); @Query("SELECT new com.onebyone.kindergarten.domain.kindergartenWorkReview.dto.WorkReviewDTO(" + "r.id, u.id, u.nickname, k.id, k.name, r.workYear, r.oneLineComment, " + @@ -30,7 +30,7 @@ public interface KindergartenWorkReviewRepository extends JpaRepository findReviewsWithUserInfo( @Param("kindergartenId") Long kindergartenId, @@ -51,7 +51,7 @@ Page findReviewsWithUserInfo( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.user.id = :userId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.deletedAt IS NULL " + "ORDER BY r.createdAt DESC") Page findMyReviews( @@ -72,7 +72,7 @@ Page findMyReviews( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.benefitAndSalaryScore = :score " + "AND r.deletedAt IS NULL") Page findByBenefitAndSalaryScore( @@ -94,7 +94,7 @@ Page findByBenefitAndSalaryScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.workLifeBalanceScore = :score " + "AND r.deletedAt IS NULL") Page findByWorkLifeBalanceScore( @@ -116,7 +116,7 @@ Page findByWorkLifeBalanceScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.workEnvironmentScore = :score " + "AND r.deletedAt IS NULL") Page findByWorkEnvironmentScore( @@ -138,7 +138,7 @@ Page findByWorkEnvironmentScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.managerScore = :score " + "AND r.deletedAt IS NULL") Page findByManagerScore( @@ -160,7 +160,7 @@ Page findByManagerScore( "JOIN r.user u " + "JOIN r.kindergarten k " + "WHERE r.kindergarten.id = :kindergartenId " + - "AND r.status = :reviewStatus " + + "AND r.reviewStatus = :reviewStatus " + "AND r.customerScore = :score " + "AND r.deletedAt IS NULL") Page findByCustomerScore( @@ -182,7 +182,7 @@ Page findByCustomerScore( "FROM kindergarten_work_review r " + "JOIN r.user u " + "JOIN r.kindergarten k " + - "WHERE r.status = :reviewStatus " + + "WHERE r.reviewStatus = :reviewStatus " + "AND r.deletedAt IS NULL") Page findAllReviewsWithUserInfo( @Param("reviewStatus") ReviewStatus reviewStatus, diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/service/KindergartenWorkReviewService.java b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/service/KindergartenWorkReviewService.java index 52b44e5..a20f525 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/service/KindergartenWorkReviewService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergartenWorkReview/service/KindergartenWorkReviewService.java @@ -64,7 +64,7 @@ public Kindergarten createWorkReview(CreateWorkReviewRequestDTO request, String .managerScore(request.getManagerScore()) .customerComment(request.getCustomerComment()) .customerScore(request.getCustomerScore()) - .status(ReviewStatus.ACCEPTED) + .reviewStatus(ReviewStatus.ACCEPTED) .likeCount(0) .shareCount(0) .build(); diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenInternshipReviewAggregateService.java b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenInternshipReviewAggregateService.java index 5ba6867..a68ced0 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenInternshipReviewAggregateService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenInternshipReviewAggregateService.java @@ -19,7 +19,7 @@ public class KindergartenInternshipReviewAggregateService { private final KindergartenInternshipReviewAggregateRepository kindergartenInternshipReviewAggregateRepository; public void updateOrCreateAggregate(Kindergarten kindergarten) { - List acceptedReviews = kindergartenInternshipReviewRepository.findByKindergartenAndStatus(kindergarten, ReviewStatus.ACCEPTED); + List acceptedReviews = kindergartenInternshipReviewRepository.findByKindergartenAndReviewStatus(kindergarten, ReviewStatus.ACCEPTED); if (acceptedReviews.isEmpty()) { return; diff --git a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenWorkReviewAggregateService.java b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenWorkReviewAggregateService.java index 2a4dddb..5d55518 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenWorkReviewAggregateService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/kindergatens/service/KindergartenWorkReviewAggregateService.java @@ -19,7 +19,7 @@ public class KindergartenWorkReviewAggregateService { private final KindergartenWorkReviewAggregateRepository workReviewAggregateRepository; public void updateOrCreateAggregate(Kindergarten kindergarten) { - List acceptedReviews = workReviewRepository.findByKindergartenAndStatus(kindergarten, ReviewStatus.ACCEPTED); + List acceptedReviews = workReviewRepository.findByKindergartenAndReviewStatus(kindergarten, ReviewStatus.ACCEPTED); if (acceptedReviews.isEmpty()) { return; diff --git a/src/main/java/com/onebyone/kindergarten/domain/reports/enums/ReportTargetType.java b/src/main/java/com/onebyone/kindergarten/domain/reports/enums/ReportTargetType.java index f9d4f54..acc34b8 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/reports/enums/ReportTargetType.java +++ b/src/main/java/com/onebyone/kindergarten/domain/reports/enums/ReportTargetType.java @@ -1,3 +1,3 @@ package com.onebyone.kindergarten.domain.reports.enums; -public enum ReportTargetType { REVIEW, POST, COMMENT } \ No newline at end of file +public enum ReportTargetType { WORK_REVIEW, INTERNSHIP_REVIEW, POST, COMMENT } \ No newline at end of file diff --git a/src/main/java/com/onebyone/kindergarten/domain/reports/service/ReportService.java b/src/main/java/com/onebyone/kindergarten/domain/reports/service/ReportService.java index 3cb1d6c..517111f 100644 --- a/src/main/java/com/onebyone/kindergarten/domain/reports/service/ReportService.java +++ b/src/main/java/com/onebyone/kindergarten/domain/reports/service/ReportService.java @@ -4,6 +4,10 @@ import com.onebyone.kindergarten.domain.communityComments.repository.CommunityCommentRepository; import com.onebyone.kindergarten.domain.communityPosts.entity.CommunityPost; import com.onebyone.kindergarten.domain.communityPosts.repository.CommunityRepository; +import com.onebyone.kindergarten.domain.kindergartenInternshipReview.entity.KindergartenInternshipReview; +import com.onebyone.kindergarten.domain.kindergartenInternshipReview.repository.KindergartenInternshipReviewRepository; +import com.onebyone.kindergarten.domain.kindergartenWorkReview.entity.KindergartenWorkReview; +import com.onebyone.kindergarten.domain.kindergartenWorkReview.repository.KindergartenWorkReviewRepository; import com.onebyone.kindergarten.domain.reports.enums.ReportTargetType; import com.onebyone.kindergarten.domain.reports.repository.ReportRepository; import com.onebyone.kindergarten.domain.reports.dto.request.CreateReportRequestDTO; @@ -27,11 +31,12 @@ @Transactional(readOnly = true) @RequiredArgsConstructor public class ReportService { - private final ReportRepository reportRepository; private final UserService userService; private final CommunityRepository communityRepository; private final CommunityCommentRepository commentRepository; + private final KindergartenWorkReviewRepository kindergartenWorkReviewRepository; + private final KindergartenInternshipReviewRepository kindergartenInternshipReviewRepository; /// 신고 생성 (사용자) @Transactional @@ -51,6 +56,7 @@ public ReportResponseDTO createReport(CreateReportRequestDTO dto, String email) .reason(dto.getReason()) .status(ReportStatus.PENDING) .build(); + reportRepository.save(report); return ReportResponseDTO.fromEntity(report); } @@ -117,8 +123,15 @@ private void _updateTargetStatus(ReportTargetType targetType, Long targetId, Rep .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_COMMENT_TARGET)); comment.updateStatus(status); } - case REVIEW -> { - throw new BusinessException(ErrorCodes.REVIEW_REPORT_NOT_IMPLEMENTED); + case WORK_REVIEW -> { + KindergartenWorkReview kindergartenWorkReview = kindergartenWorkReviewRepository.findById(targetId) + .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_WORK_REVIEW_TARGET)); + kindergartenWorkReview.updateStatus(status); + } + case INTERNSHIP_REVIEW -> { + KindergartenInternshipReview kindergartenInternshipReview = kindergartenInternshipReviewRepository.findById(targetId) + .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_INTERNSHIP_REVIEW_TARGET)); + kindergartenInternshipReview.updateStatus(status); } default -> throw new BusinessException(ErrorCodes.INVALID_REPORT_TARGET_TYPE); } @@ -131,7 +144,10 @@ private void validateReportTarget(ReportTargetType targetType, Long targetId) { .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_POST_TARGET)); case COMMENT -> commentRepository.findById(targetId) .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_COMMENT_TARGET)); - case REVIEW -> throw new BusinessException(ErrorCodes.REVIEW_REPORT_NOT_IMPLEMENTED); + case WORK_REVIEW -> kindergartenWorkReviewRepository.findById(targetId) + .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_WORK_REVIEW_TARGET)); + case INTERNSHIP_REVIEW -> kindergartenInternshipReviewRepository.findById(targetId) + .orElseThrow(() -> new BusinessException(ErrorCodes.INVALID_REPORT_INTERNSHIP_REVIEW_TARGET)); } } } diff --git a/src/main/java/com/onebyone/kindergarten/global/exception/ErrorCodes.java b/src/main/java/com/onebyone/kindergarten/global/exception/ErrorCodes.java index de2a8c2..b1f5280 100644 --- a/src/main/java/com/onebyone/kindergarten/global/exception/ErrorCodes.java +++ b/src/main/java/com/onebyone/kindergarten/global/exception/ErrorCodes.java @@ -53,6 +53,8 @@ public enum ErrorCodes { FAILED_EMAIL_CERTIFICATION_EXCEPTION("E0047", "인증되지 않은 이메일입니다."), FAILED_AUTHORIZATION_EXCEPTION("E0048", "인증되지 않은 요청입니다."), INCORRECT_KINDERGARTEN_EXCEPTION("E0049", "유치원이 일치하지 않습니다."), + INVALID_REPORT_INTERNSHIP_REVIEW_TARGET("E0013", "존재하지 않는 실습 신고 리뷰입니다."), + INVALID_REPORT_WORK_REVIEW_TARGET("E0013", "존재하지 않는 근무 신고 리뷰입니다."), INTERNAL_SERVER_ERROR("E9999","알 수 없는 에러 발생"); private final String code;