Skip to content

Commit

Permalink
feat: review생성 기능 추가 (#89)
Browse files Browse the repository at this point in the history
- 컨트롤러, 서비스, DTO, 엔티티 생성
- 리뷰 create 생성:
  • Loading branch information
ah9mon authored Aug 10, 2023
1 parent 2065f93 commit 9739ac9
Show file tree
Hide file tree
Showing 8 changed files with 225 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/main/java/com/anywayclear/controller/ReviewController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.anywayclear.controller;

import com.anywayclear.dto.request.ReviewCreateRequest;
import com.anywayclear.dto.response.ReviewResponse;
import com.anywayclear.entity.Member;
import com.anywayclear.service.ReviewService;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/reviews")
public class ReviewController {
private final ReviewService reviewService;

public ReviewController(ReviewService reviewService) {
this.reviewService = reviewService;
}

@PostMapping("/{auctionId}")
public ResponseEntity<ReviewResponse> createReview(
@RequestBody ReviewCreateRequest request,
@PathVariable("auctionId") Long auctionId,
@AuthenticationPrincipal OAuth2User oAuth2User){
String reviewerId = (String) oAuth2User.getAttributes().get("userId");
ReviewResponse rr = reviewService.createReview(reviewerId, auctionId, request);
return ResponseEntity.ok(rr);
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/anywayclear/dto/request/ReviewCreateRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.anywayclear.dto.request;

import com.anywayclear.entity.Auction;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Getter
@Setter
@NoArgsConstructor
public class ReviewCreateRequest {


@NotBlank
private String comment;

@NotNull
private int score;

@Builder
public ReviewCreateRequest(String comment, int score) {
this.comment = comment;
this.score = score;
}
}
50 changes: 50 additions & 0 deletions src/main/java/com/anywayclear/dto/response/ReviewResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.anywayclear.dto.response;

import com.anywayclear.entity.Auction;
import com.anywayclear.entity.Member;
import com.anywayclear.entity.Review;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Getter
public class ReviewResponse {

private Long id;
private String comment;
private int score;
private String createdDate;
private Auction auction;
private String memberUserId;
private String memberNickname;

@Builder
public ReviewResponse(Long id, String comment, int score, String createdDate, Auction auction, String memberUserId, String memberNickname) {
this.id = id;
this.comment = comment;
this.score = score;
this.createdDate = createdDate;
this.auction = auction;
this.memberUserId = memberUserId;
this.memberNickname = memberNickname;
}

public static ReviewResponse toResponse(Review review) {
ReviewResponse rr = ReviewResponse.builder()
.id(review.getId())
.comment(review.getComment())
.score(review.getScore())
.createdDate(review.getCreatedDate())
.auction(review.getAuction())
.memberUserId(review.getMember().getUserId())
.memberNickname(review.getMember().getNickname())
.build();

System.out.println("rr = " + rr);
return rr;
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/anywayclear/entity/Auction.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ public class Auction extends BaseTime{
@JoinColumn(name = "produce_id")
private Produce produce;

@OneToOne
@JoinColumn(name = "review__id", referencedColumnName = "id")
private Review review;

private int price;

private String nickname;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/anywayclear/entity/Produce.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public class Produce {

@OneToMany(mappedBy = "produce")
private List<Dib> dibList = new ArrayList<>();

@Builder
public Produce(String name, String description, String image, int startPrice, int kg, int ea, LocalDateTime startDate, LocalDateTime endDate, int status) {
this.name = name;
Expand Down
58 changes: 58 additions & 0 deletions src/main/java/com/anywayclear/entity/Review.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.anywayclear.entity;

import com.anywayclear.dto.request.ReviewCreateRequest;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Getter
@Setter
@Entity
@NoArgsConstructor
public class Review {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;

@Column(nullable = false)
private String comment;

@Column(nullable = false)
private int score;

@CreatedDate
private String createdDate;

@OneToOne
@JoinColumn(name = "auction_id", referencedColumnName = "id")
private Auction auction;

@OneToOne
@JoinColumn(name = "member_id", referencedColumnName = "id")
private Member member;

@Builder
public Review(String comment, int score, String createdDate, Auction auction, Member member) {
this.comment = comment;
this.score = score;
this.createdDate = createdDate;
this.auction = auction;
this.member = member;
}

public static Review toEntity(ReviewCreateRequest request) {
return Review.builder()
.comment(request.getComment())
.score(request.getScore())
.createdDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm")))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.anywayclear.repository;

import com.anywayclear.entity.Review;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ReviewRepository extends JpaRepository<Review, Long> {
}
42 changes: 42 additions & 0 deletions src/main/java/com/anywayclear/service/ReviewService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.anywayclear.service;

import com.anywayclear.dto.request.ReviewCreateRequest;
import com.anywayclear.dto.response.ReviewResponse;
import com.anywayclear.entity.Auction;
import com.anywayclear.entity.Member;
import com.anywayclear.entity.Review;
import com.anywayclear.exception.CustomException;
import com.anywayclear.exception.ExceptionCode;
import com.anywayclear.repository.AuctionRepository;
import com.anywayclear.repository.MemberRepository;
import com.anywayclear.repository.ReviewRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class ReviewService {

private final MemberRepository memberRepository;
private final AuctionRepository auctionRepository;
private final ReviewRepository reviewRepository;

public ReviewService(MemberRepository memberRepository, AuctionRepository auctionRepository, ReviewRepository reviewRepository) {
this.memberRepository = memberRepository;
this.auctionRepository = auctionRepository;
this.reviewRepository = reviewRepository;
}

@Transactional
public ReviewResponse createReview(String reviewerId, Long auctionId, ReviewCreateRequest request) {
Review review = reviewRepository.save(Review.toEntity(request));

Member reviewer = memberRepository.findByUserId(reviewerId).orElseThrow(() -> new CustomException(ExceptionCode.INVALID_MEMBER));
Auction auction = auctionRepository.findById(auctionId).orElseThrow(() -> new CustomException(ExceptionCode.INVALID_AUCTION_ID));

review.setMember(reviewer);
review.setAuction(auction);

reviewRepository.save(review);
return ReviewResponse.toResponse(review);
}
}

0 comments on commit 9739ac9

Please sign in to comment.