Skip to content

Commit

Permalink
[#42] Feat: 리뷰 삭제 API 개발
Browse files Browse the repository at this point in the history
  • Loading branch information
SY2on committed Feb 2, 2024
1 parent 9905fa8 commit c26acf1
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ssu.eatssu.domain.admin.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import ssu.eatssu.domain.admin.service.ManageReviewService;
import ssu.eatssu.global.handler.response.BaseResponse;

@Controller
@RequestMapping("/admin/reviews")
@RequiredArgsConstructor
public class ManageReviewController {
private final ManageReviewService manageReviewService;

@ResponseBody
@DeleteMapping("/{reviewId}")
public BaseResponse<?> delete(@PathVariable Long reviewId) {
manageReviewService.delete(reviewId);
return BaseResponse.success();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ssu.eatssu.domain.admin.listener;

import lombok.RequiredArgsConstructor;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import ssu.eatssu.domain.admin.event.ReviewDeleteEvent;
import ssu.eatssu.domain.admin.service.ManageReportService;

@Component
@RequiredArgsConstructor
public class ReportEventListener {

private final ManageReportService manageReportService;

@EventListener
public void deleteReport(ReviewDeleteEvent event) {
manageReportService.deleteAllByReviewId(event.reviewId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,12 @@ private List<ReportLine> fetchReportLines(Pageable pageable) {
.limit(pageable.getPageSize())
.fetch();
}

public List<Long> findAllByReviewId(Long reviewId) {
return queryFactory
.select(report.id)
.from(report)
.where(report.review.id.eq(reviewId))
.fetch();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ssu.eatssu.domain.admin.persistence;

import org.springframework.data.jpa.repository.JpaRepository;
import ssu.eatssu.domain.review.entity.Review;

public interface ManageReviewRepository extends JpaRepository<Review, Long> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import ssu.eatssu.domain.admin.persistence.LoadReportRepository;
import ssu.eatssu.domain.admin.persistence.ManageReportRepository;

import java.util.List;

@Service
@RequiredArgsConstructor
public class ManageReportService {
Expand All @@ -24,4 +26,9 @@ public PageWrapper<ReportLine> getReportBoard(Pageable pageable) {
public void delete(Long reportId) {
manageReportRepository.deleteById(reportId);
}

public void deleteAllByReviewId(Long reviewId) {
List<Long> reportIds = loadReportRepository.findAllByReviewId(reviewId);
manageReportRepository.deleteAllByIdInBatch(reportIds);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package ssu.eatssu.domain.admin.service;

import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import ssu.eatssu.domain.admin.event.ReviewDeleteEvent;
import ssu.eatssu.domain.admin.persistence.ManageReviewRepository;

@Service
@Transactional
@RequiredArgsConstructor
public class ManageReviewService {
private final ManageReviewRepository manageReviewRepository;
private final ApplicationEventPublisher publisher;

public void delete(Long reviewId) {
// 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다.
publisher.publishEvent(new ReviewDeleteEvent(reviewId));

manageReviewRepository.deleteById(reviewId);
}
}

0 comments on commit c26acf1

Please sign in to comment.