diff --git a/src/main/java/com/example/likelion12/controller/ReviewController.java b/src/main/java/com/example/likelion12/controller/ReviewController.java new file mode 100644 index 0000000..dc24029 --- /dev/null +++ b/src/main/java/com/example/likelion12/controller/ReviewController.java @@ -0,0 +1,32 @@ +package com.example.likelion12.controller; +import com.example.likelion12.common.response.BaseResponse; +import com.example.likelion12.dto.PostReviewRequest; +import com.example.likelion12.dto.PostReviewResponse; +import com.example.likelion12.service.ReviewService; +import com.example.likelion12.util.JwtProvider; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@RestController +@AllArgsConstructor +@RequestMapping("/review") +public class ReviewController { + + private final ReviewService reviewService; + private final JwtProvider jwtProvider; + + @PostMapping + public BaseResponse createReview(@RequestHeader("Authorization") String authorization , @RequestBody PostReviewRequest postReviewRequest) { + + Long memberId = jwtProvider.extractIdFromHeader(authorization); + + Long reviewId = reviewService.createReview(postReviewRequest.getFacilityId(), + postReviewRequest.getRanking(), + postReviewRequest.getComment(), + memberId); + PostReviewResponse response = new PostReviewResponse(reviewId); + return new BaseResponse<>(response); + } +} diff --git a/src/main/java/com/example/likelion12/domain/Review.java b/src/main/java/com/example/likelion12/domain/Review.java index abf39ab..84e5024 100644 --- a/src/main/java/com/example/likelion12/domain/Review.java +++ b/src/main/java/com/example/likelion12/domain/Review.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import static jakarta.persistence.FetchType.LAZY; @@ -28,7 +29,7 @@ public class Review extends BaseTime { @Enumerated(EnumType.STRING) @Column(nullable = false) - private BaseStatus status; + private BaseStatus status = BaseStatus.ACTIVE; /** 멤버 와의 연관관계의 주인 */ @ManyToOne(fetch = LAZY) @@ -39,4 +40,12 @@ public class Review extends BaseTime { @ManyToOne(fetch = LAZY) @JoinColumn(name = "facility_id") private Facility facility; + + public void setReview(Facility facility , int ranking, String comment , Member member) + { + this.facility = facility; + this.ranking = ranking; + this.comment = comment; + this.member = member; + } } diff --git a/src/main/java/com/example/likelion12/dto/PostReviewRequest.java b/src/main/java/com/example/likelion12/dto/PostReviewRequest.java new file mode 100644 index 0000000..2b764da --- /dev/null +++ b/src/main/java/com/example/likelion12/dto/PostReviewRequest.java @@ -0,0 +1,12 @@ +package com.example.likelion12.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class PostReviewRequest { + private Long facilityId; + private int ranking; + private String comment; +} diff --git a/src/main/java/com/example/likelion12/dto/PostReviewResponse.java b/src/main/java/com/example/likelion12/dto/PostReviewResponse.java new file mode 100644 index 0000000..3c9cc9e --- /dev/null +++ b/src/main/java/com/example/likelion12/dto/PostReviewResponse.java @@ -0,0 +1,10 @@ +package com.example.likelion12.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class PostReviewResponse { + private Long ReviewId; +} diff --git a/src/main/java/com/example/likelion12/repository/ReviewRepository.java b/src/main/java/com/example/likelion12/repository/ReviewRepository.java new file mode 100644 index 0000000..9cc06dd --- /dev/null +++ b/src/main/java/com/example/likelion12/repository/ReviewRepository.java @@ -0,0 +1,20 @@ +package com.example.likelion12.repository; + +import com.example.likelion12.domain.Review; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ReviewRepository extends JpaRepository { + + // 리뷰 작성 + // 기본적으로 JpaRepository의 save() 메서드를 사용하여 작성할 수 있습니다. + // 예: reviewRepository.save(review); + + // 리뷰 수정 + // 기본적으로 JpaRepository의 save() 메서드를 사용하여 수정할 수 있습니다. + // 예: reviewRepository.save(updatedReview); + + // 리뷰 삭제 + void deleteById(Long reviewId); +} diff --git a/src/main/java/com/example/likelion12/service/ReviewService.java b/src/main/java/com/example/likelion12/service/ReviewService.java new file mode 100644 index 0000000..4a4cead --- /dev/null +++ b/src/main/java/com/example/likelion12/service/ReviewService.java @@ -0,0 +1,48 @@ +package com.example.likelion12.service; + +import com.example.likelion12.common.exception.MemberException; +import com.example.likelion12.domain.Facility; +import com.example.likelion12.domain.Member; +import com.example.likelion12.domain.Review; +import com.example.likelion12.domain.base.BaseStatus; +import com.example.likelion12.repository.FacilityRepository; +import com.example.likelion12.repository.MemberRepository; +import com.example.likelion12.repository.ReviewRepository; +import jakarta.transaction.Transactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import static com.example.likelion12.common.response.status.BaseExceptionResponseStatus.CANNOT_FOUND_MEMBER; + +@Service +public class ReviewService { + + @Autowired + private ReviewRepository reviewRepository; + + @Autowired + private FacilityRepository facilityRepository; + + @Autowired + private MemberRepository memberRepository; + + @Transactional + public Long createReview(Long facilityId, int ranking, String comment , Long memberId) { + + Member member = memberRepository.findByMemberIdAndStatus(memberId, BaseStatus.ACTIVE) + .orElseThrow(()-> new MemberException(CANNOT_FOUND_MEMBER)); + + // facilityId로 facility 찾고 + Facility facility = facilityRepository.findById(facilityId) + .orElseThrow(() -> new IllegalArgumentException("Invalid facility ID")); + + //리뷰에 받아온 값들 넣고 + Review review = new Review(); + review.setReview(facility, ranking, comment, member); + + //레퍼지토리에 저장 + Review savedReview = reviewRepository.save(review); + + return savedReview.getReviewId(); + } +}