-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feature/store-post-review] 식당 리뷰 생성 API #84
Changes from all commits
c2a2443
72542f9
7f470ea
61287a5
3352c71
49db0a8
973377a
81d0497
0926686
c204295
4d39c5f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,7 @@ | |
import static everymeal.server.global.exception.ExceptionList.REVIEW_ALREADY_MARKED; | ||
import static everymeal.server.global.exception.ExceptionList.REVIEW_MARK_NOT_FOUND; | ||
import static everymeal.server.global.exception.ExceptionList.REVIEW_UNAUTHORIZED; | ||
import static everymeal.server.global.exception.ExceptionList.STORE_NOT_FOUND; | ||
|
||
import everymeal.server.global.exception.ApplicationException; | ||
import everymeal.server.global.util.TimeFormatUtil; | ||
|
@@ -15,6 +16,8 @@ | |
import everymeal.server.review.dto.response.ReviewDto.ReviewTodayGetRes; | ||
import everymeal.server.review.entity.Image; | ||
import everymeal.server.review.entity.Review; | ||
import everymeal.server.store.entity.Store; | ||
import everymeal.server.store.repository.StoreRepository; | ||
import everymeal.server.user.entity.User; | ||
import everymeal.server.user.service.UserCommServiceImpl; | ||
import java.util.ArrayList; | ||
|
@@ -31,13 +34,13 @@ public class ReviewServiceImpl implements ReviewService { | |
private final RestaurantCommServiceImpl restaurantCommServiceImpl; | ||
private final UserCommServiceImpl userCommServiceImpl; | ||
private final ReviewCommServiceImpl reviewCommServiceImpl; | ||
private final StoreRepository storeRepository; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 여기서 StoreRepository를 통하는 진입점을 별도의 서비스로 만들어서 하는 건 어떨까요? |
||
|
||
@Override | ||
@Transactional | ||
public Long createReview(ReviewCreateReq request, Long userIdx) { | ||
// (1) restaurant 객체 조회 | ||
Restaurant restaurant = | ||
restaurantCommServiceImpl.getRestaurantEntity(request.restaurantIdx()); | ||
Restaurant restaurant = restaurantCommServiceImpl.getRestaurantEntity(request.idx()); | ||
|
||
// (2) 이미지 주소 <> 이미지 객체 치환 | ||
List<Image> imageList = getImageFromString(request.imageList()); | ||
|
@@ -172,6 +175,38 @@ public ReviewTodayGetRes getTodayReview(Long restaurantIdx, String offeredAt) { | |
reviewCommServiceImpl.getTodayReviewEntityFromMapper(restaurantIdx, offeredAt)); | ||
} | ||
|
||
@Override | ||
@Transactional | ||
public Long createReviewByStore(ReviewCreateReq request, Long userIdx) { | ||
// (1) restaurant 객체 조회 | ||
Store store = | ||
storeRepository | ||
.findById(request.idx()) | ||
.orElseThrow(() -> new ApplicationException(STORE_NOT_FOUND)); | ||
|
||
// (2) 이미지 주소 <> 이미지 객체 치환 | ||
List<Image> imageList = getImageFromString(request.imageList()); | ||
User user = userCommServiceImpl.getUserEntity(userIdx); | ||
|
||
// (3) Entity 생성 ( 사진리뷰인지 분기 처리 ) | ||
Review review = | ||
(request.content() == null && request.grade() == 0) | ||
? Review.builder().images(imageList).store(store).user(user).build() | ||
: Review.builder() | ||
.content(request.content()) | ||
.images(imageList) | ||
.store(store) | ||
.grade(request.grade()) | ||
.user(user) | ||
.build(); | ||
|
||
// (4) 저장 | ||
Review savedReview = reviewCommServiceImpl.save(review); | ||
|
||
store.addGrade(request.grade()); | ||
return savedReview.getIdx(); | ||
Comment on lines
+181
to
+207
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @dldmsql 은비님이 만들어주신 로직... 너무 잘 사용했습니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ㅎ.ㅎ 도움이 되었다니 다행이에요 |
||
} | ||
|
||
/** | ||
* ============================================================================================ | ||
* PRIVATE FUNCTION | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
import static everymeal.server.meal.MealData.getRestaurantRegisterReq; | ||
import static everymeal.server.meal.MealData.getUniversity; | ||
import static everymeal.server.review.ReviewData.getReviewEntity; | ||
import static everymeal.server.review.ReviewData.getStoreEntity; | ||
import static everymeal.server.review.ReviewData.getUserEntity; | ||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.junit.jupiter.api.Assertions.*; | ||
|
@@ -22,6 +23,8 @@ | |
import everymeal.server.review.entity.ReviewMark; | ||
import everymeal.server.review.repository.ReviewMarkRepository; | ||
import everymeal.server.review.repository.ReviewRepository; | ||
import everymeal.server.store.entity.Store; | ||
import everymeal.server.store.repository.StoreRepository; | ||
import everymeal.server.university.entity.University; | ||
import everymeal.server.university.repository.UniversityRepository; | ||
import everymeal.server.user.entity.User; | ||
|
@@ -44,6 +47,7 @@ class ReviewServiceImplTest extends IntegrationTestSupport { | |
@Autowired private RestaurantRepository restaurantRepository; | ||
@Autowired private UserRepository userRepository; | ||
@Autowired private ReviewMarkRepository reviewMarkRepository; | ||
@Autowired private StoreRepository storeRepository; | ||
|
||
/** | ||
* ============================================================================================ | ||
|
@@ -53,7 +57,7 @@ class ReviewServiceImplTest extends IntegrationTestSupport { | |
private University university; | ||
|
||
private Meal meal; | ||
|
||
private Store store; | ||
private Restaurant restaurant; | ||
private User user; | ||
private Review review; | ||
|
@@ -66,13 +70,15 @@ void createDummyForTest() { | |
meal = mealRepository.save(getMealEntity(restaurant)); | ||
user = userRepository.save(getUserEntity(university)); | ||
review = reviewRepository.save(getReviewEntity(restaurant, user)); | ||
store = storeRepository.save(getStoreEntity(university)); | ||
} | ||
|
||
@AfterEach | ||
void tearDown() { | ||
reviewMarkRepository.deleteAllInBatch(); | ||
reviewRepository.deleteAllInBatch(); | ||
mealRepository.deleteAllInBatch(); | ||
storeRepository.deleteAllInBatch(); | ||
restaurantRepository.deleteAllInBatch(); | ||
userRepository.deleteAllInBatch(); | ||
universityRepository.deleteAllInBatch(); | ||
Comment on lines
76
to
84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @dldmsql 이 부분 삭제 순서가 엄청 중요하더라구요...! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ㅎㅎ.. 맞아요 관계가 많다보니 ㅠ |
||
|
@@ -230,4 +236,30 @@ void getTodayReview() { | |
// then | ||
assertEquals(result.content(), review.getContent()); | ||
} | ||
|
||
@DisplayName("주변 식당 리뷰 생성") | ||
@Test | ||
void getNearRestaurantReview() { | ||
// given | ||
ReviewCreateReq req = | ||
new ReviewCreateReq(store.getIdx(), 5, "오늘 학식 진짜 미침", List.of(), true); | ||
// when | ||
var result = reviewService.createReviewByStore(req, user.getIdx()); | ||
|
||
// then | ||
assertThat(result).isNotNull(); | ||
} | ||
|
||
@DisplayName("없는 식당 리뷰 생성 - 실패") | ||
@Test | ||
void getNearRestaurantReview_failed() { | ||
// given | ||
ReviewCreateReq req = new ReviewCreateReq(0L, 5, "오늘 학식 진짜 미침", List.of(), true); | ||
// when | ||
ApplicationException applicationException = | ||
assertThrows( | ||
ApplicationException.class, | ||
() -> reviewService.createReviewByStore(req, user.getIdx())); | ||
assertEquals(applicationException.getErrorCode(), ExceptionList.STORE_NOT_FOUND.getCODE()); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dldmsql
식당 -> 학식으로 변경했습니다!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
엇!! 감사합니다