Skip to content

Commit

Permalink
feat: 마이페이지 카페 조회 시 roadAddress 및 내가 남긴 리뷰 함께 조회 기능 구현 (#137)
Browse files Browse the repository at this point in the history
* feat: cafe roadAddress 추가

* feat: 리뷰 남긴 카페 조회 시 내가 남긴 리뷰 함께 조회

* fix: 동시성 테스트 실패 수정

* feat: 코드리뷰 반영
  • Loading branch information
jung-woo-kim authored Dec 1, 2023
1 parent b2fad09 commit 00034c2
Show file tree
Hide file tree
Showing 36 changed files with 265 additions and 182 deletions.
33 changes: 33 additions & 0 deletions src/main/java/mocacong/server/domain/Cafe.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ public class Cafe extends BaseTime {
@Column(name = "map_id", unique = true, nullable = false)
private String mapId;

@Column(name = "road_address")
private String roadAddress;

@Column(name = "phone_number")
private String phoneNumber;

@OneToMany(mappedBy = "cafe", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Score> score;

Expand All @@ -54,6 +60,29 @@ public Cafe(String mapId, String name) {
this.comments = new ArrayList<>();
}

public Cafe(String mapId, String name, String roadAddress) {
this.mapId = mapId;
this.name = name;
this.roadAddress = roadAddress;
this.cafeDetail = new CafeDetail();
this.cafeImages = new ArrayList<>();
this.score = new ArrayList<>();
this.reviews = new ArrayList<>();
this.comments = new ArrayList<>();
}

public Cafe(String mapId, String name, String roadAddress, String phoneNumber) {
this.mapId = mapId;
this.name = name;
this.roadAddress = roadAddress;
this.phoneNumber = phoneNumber;
this.cafeDetail = new CafeDetail();
this.cafeImages = new ArrayList<>();
this.score = new ArrayList<>();
this.reviews = new ArrayList<>();
this.comments = new ArrayList<>();
}

public void updateCafeDetails() {
StudyType studyType = getMostFrequentStudyType();
Wifi wifi = Wifi.averageFrom(reviews.stream().map(Review::getWifi)
Expand All @@ -71,6 +100,10 @@ public void updateCafeDetails() {
this.cafeDetail = new CafeDetail(studyType, wifi, parking, toilet, desk, power, sound);
}

public void updateCafeRoadAddress(String roadAddress) {
this.roadAddress = roadAddress;
}

private StudyType getMostFrequentStudyType() {
int solo = 0, group = 0;
for (Review review : reviews) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,10 @@ public class CafeRegisterRequest {

@NotBlank(message = "1012:공백일 수 없습니다.")
private String name;

@NotBlank(message = "1012:공백일 수 없습니다.")
private String roadAddress;

@NotBlank(message = "1012:공백일 수 없습니다.")
private String phoneNumber;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ public class FindCafeResponse {

private Boolean favorite;
private Long favoriteId;
private String name;
private String roadAddress;
private String phoneNumber;
private double score;
private Integer myScore;
private String studyType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import java.util.List;
import java.util.stream.Collectors;

import lombok.*;

import mocacong.server.domain.Cafe;
import mocacong.server.domain.Comment;

Expand All @@ -15,12 +17,13 @@ public class MyCommentCafeResponse {
private String mapId;
private String name;
private String studyType;
private String roadAddress;
private List<String> comments;

public static MyCommentCafeResponse of(Cafe cafe, List<Comment> comments) {
List<String> contents = comments.stream()
.map(Comment::getContent)
.collect(Collectors.toList());
return new MyCommentCafeResponse(cafe.getMapId(), cafe.getName(), cafe.getStudyType(), contents);
return new MyCommentCafeResponse(cafe.getMapId(), cafe.getName(), cafe.getStudyType(), cafe.getRoadAddress(), contents);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
@AllArgsConstructor
@ToString
public class MyFavoriteCafeResponse {

private String mapId;
private String name;
private String studyType;
private double score;
private String roadAddress;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mocacong.server.dto.response;

import lombok.*;
import mocacong.server.domain.CafeDetail;
import mocacong.server.domain.cafedetail.StudyType;

@Getter
Expand All @@ -12,11 +13,25 @@ public class MyReviewCafeResponse {
private String name;
private String myStudyType;
private int myScore;
private String roadAddress;
private String wifi;
private String parking;
private String toilet;
private String power;
private String sound;
private String desk;

public MyReviewCafeResponse(String mapId, String name, StudyType myStudyType, int myScore) {
public MyReviewCafeResponse(String mapId, String name, StudyType myStudyType, int myScore, String roadAddress, CafeDetail cafeDetail) {
this.mapId = mapId;
this.name = name;
this.myStudyType = myStudyType.getValue();
this.myScore = myScore;
this.roadAddress = roadAddress;
this.wifi = cafeDetail.getWifiValue();
this.parking = cafeDetail.getParkingValue();
this.toilet = cafeDetail.getToiletValue();
this.power = cafeDetail.getPowerValue();
this.sound = cafeDetail.getSoundValue();
this.desk = cafeDetail.getDeskValue();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
@ToString
public class PreviewCafeResponse {

private String name;
private String roadAddress;
private Boolean favorite;
private double score;
private String studyType;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/mocacong/server/repository/CafeRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public interface CafeRepository extends JpaRepository<Cafe, Long> {
"where m.id = :id")
Slice<Cafe> findByMyFavoriteCafes(Long id, Pageable pageRequest);

@Query("select new mocacong.server.dto.response.MyReviewCafeResponse(c.mapId,c.name,r.cafeDetail.studyType,s.score) from Review r " +
@Query("select new mocacong.server.dto.response.MyReviewCafeResponse(c.mapId,c.name,r.cafeDetail.studyType,s.score,c.roadAddress, r.cafeDetail) from Review r " +
"join r.cafe c " +
"join r.member m " +
"join c.score s "+
"join c.score s " +
"where m.id = :id and s.member.id = :id")
Slice<MyReviewCafeResponse> findMyReviewCafesById(Long id, Pageable pageRequest);
}
21 changes: 18 additions & 3 deletions src/main/java/mocacong/server/service/CafeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import javax.persistence.EntityManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

Expand All @@ -53,13 +54,21 @@ public class CafeService {

@Transactional
public void save(CafeRegisterRequest request) {
Cafe cafe = new Cafe(request.getId(), request.getName());
Cafe cafe = new Cafe(request.getId(), request.getName(), request.getRoadAddress(), request.getPhoneNumber());


Optional<Cafe> cafeOptional = cafeRepository.findByMapId(request.getId());

try {
cafeRepository.save(cafe);
cafeRepository.findByMapId(request.getId())
.ifPresentOrElse(
existedCafe -> existedCafe.updateCafeRoadAddress(request.getRoadAddress()),
() -> cafeRepository.save(cafe)
);
} catch (DataIntegrityViolationException e) {
throw new DuplicateCafeException();
}

}

@Transactional(readOnly = true)
Expand All @@ -78,6 +87,9 @@ public FindCafeResponse findCafeByMapId(Long memberId, String mapId) {
return new FindCafeResponse(
favoriteId != null,
favoriteId,
cafe.getName(),
cafe.getRoadAddress(),
cafe.getPhoneNumber(),
cafe.findAverageScore(),
scoreByLoginUser != null ? scoreByLoginUser.getScore() : null,
cafeDetail.getStudyTypeValue(),
Expand Down Expand Up @@ -105,6 +117,8 @@ public PreviewCafeResponse previewCafeByMapId(Long memberId, String mapId) {
Long favoriteId = favoriteRepository.findFavoriteIdByCafeIdAndMemberId(cafe.getId(), member.getId())
.orElse(null);
return new PreviewCafeResponse(
cafe.getName(),
cafe.getRoadAddress(),
favoriteId != null,
cafe.findAverageScore(),
cafeDetail.getStudyTypeValue(),
Expand Down Expand Up @@ -149,7 +163,7 @@ public MyFavoriteCafesResponse findMyFavoriteCafes(Long memberId, Integer page,
List<MyFavoriteCafeResponse> responses = myFavoriteCafes
.getContent()
.stream()
.map(cafe -> new MyFavoriteCafeResponse(cafe.getMapId(), cafe.getName(), cafe.getStudyType(), cafe.findAverageScore()))
.map(cafe -> new MyFavoriteCafeResponse(cafe.getMapId(), cafe.getName(), cafe.getStudyType(), cafe.findAverageScore(), cafe.getRoadAddress()))
.collect(Collectors.toList());
return new MyFavoriteCafesResponse(myFavoriteCafes.isLast(), responses);
}
Expand All @@ -172,6 +186,7 @@ public MyCommentCafesResponse findMyCommentCafes(Long memberId, int page, int co
List<Comment> comments = commentRepository.findAllByMemberId(member.getId());

List<MyCommentCafeResponse> responses = comments.stream()
// .map(MyCommentCafeResponse::from)
.collect(Collectors.groupingByConcurrent(Comment::getCafe))
.entrySet()
.stream()
Expand Down
30 changes: 15 additions & 15 deletions src/test/java/mocacong/server/acceptance/CafeAcceptanceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class CafeAcceptanceTest extends AcceptanceTest {
@Test
@DisplayName("카페를 정상적으로 등록한다")
void cafeSave() {
CafeRegisterRequest request = new CafeRegisterRequest("1", "메리네 카페");
CafeRegisterRequest request = new CafeRegisterRequest("1", "메리네 카페", "서울시 강남구", "010-1234-5678");

RestAssured.given().log().all()
.contentType(MediaType.APPLICATION_JSON_VALUE)
Expand All @@ -36,7 +36,7 @@ void cafeSave() {
@DisplayName("특정 카페 정보를 조회한다")
void findCafe() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));

MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
Expand All @@ -55,7 +55,7 @@ void findCafe() {
@DisplayName("카페에 대한 리뷰를 작성한다")
void saveCafeReview() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));

MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
Expand Down Expand Up @@ -83,7 +83,7 @@ void saveCafeReview() {
@DisplayName("카페에 대해 내가 작성한 리뷰를 조회한다")
void findMyCafeReview() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));

MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
Expand All @@ -103,7 +103,7 @@ void findMyCafeReview() {
@DisplayName("카페에 대한 리뷰를 다시 작성할 수 없다")
void saveCafeReviewManyTimes() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));

MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
Expand All @@ -126,7 +126,7 @@ void saveCafeReviewManyTimes() {
@DisplayName("등록한 카페에 대한 리뷰를 수정한다")
void updateCafeReview() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));
MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
String token = 로그인_토큰_발급(signUpRequest.getEmail(), signUpRequest.getPassword());
Expand Down Expand Up @@ -157,7 +157,7 @@ void updateCafeReview() {
@DisplayName("등록하지 않은 카페에 대한 리뷰는 수정할 수 없다")
void updateCafeReviewNotFoundReview() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "서울시 강남구", "010-1234-5678"));
MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
String token = 로그인_토큰_발급(signUpRequest.getEmail(), signUpRequest.getPassword());
Expand All @@ -178,7 +178,7 @@ void updateCafeReviewNotFoundReview() {
@DisplayName("카페 정보를 미리보기한다")
void previewCafe() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페", "100", "010-1234-5678"));

MemberSignUpRequest signUpRequest1 = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
MemberSignUpRequest signUpRequest2 = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "메리");
Expand Down Expand Up @@ -206,9 +206,9 @@ void getCafesFilterStudyType() {
String mapId1 = "12332312";
String mapId2 = "12355412";
String mapId3 = "18486512";
카페_등록(new CafeRegisterRequest(mapId1, "메리네 카페 본점"));
카페_등록(new CafeRegisterRequest(mapId2, "메리네 카페 2호점"));
카페_등록(new CafeRegisterRequest(mapId3, "메리네 카페 3호점"));
카페_등록(new CafeRegisterRequest(mapId1, "메리네 카페 본점", "서울시 강남구", "010-1234-5678"));
카페_등록(new CafeRegisterRequest(mapId2, "메리네 카페 2호점", "서울시 강남구", "010-1234-5678"));
카페_등록(new CafeRegisterRequest(mapId3, "메리네 카페 3호점", "서울시 강남구", "010-1234-5678"));
MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
String token = 로그인_토큰_발급(signUpRequest.getEmail(), signUpRequest.getPassword());
Expand Down Expand Up @@ -242,9 +242,9 @@ void getCafesFilterFavorites() {
String mapId1 = "12332312";
String mapId2 = "12355412";
String mapId3 = "18486512";
카페_등록(new CafeRegisterRequest(mapId1, "메리네 카페 본점"));
카페_등록(new CafeRegisterRequest(mapId2, "메리네 카페 2호점"));
카페_등록(new CafeRegisterRequest(mapId3, "메리네 카페 3호점"));
카페_등록(new CafeRegisterRequest(mapId1, "메리네 카페 본점", "서울시 강남구", "010-1234-5678"));
카페_등록(new CafeRegisterRequest(mapId2, "메리네 카페 2호점", "서울시 강남구", "010-1234-5678"));
카페_등록(new CafeRegisterRequest(mapId3, "메리네 카페 3호점", "서울시 강남구", "010-1234-5678"));
MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
String token = 로그인_토큰_발급(signUpRequest.getEmail(), signUpRequest.getPassword());
Expand All @@ -270,7 +270,7 @@ void getCafesFilterFavorites() {
@DisplayName("특정 카페 이미지들을 조회한다")
void getCafeImages() {
String mapId = "12332312";
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페 본점"));
카페_등록(new CafeRegisterRequest(mapId, "메리네 카페 본점", "서울시 강남구", "010-1234-5678"));
MemberSignUpRequest signUpRequest = new MemberSignUpRequest("[email protected]", "a1b2c3d4", "케이");
회원_가입(signUpRequest);
String token = 로그인_토큰_발급(signUpRequest.getEmail(), signUpRequest.getPassword());
Expand Down
Loading

0 comments on commit 00034c2

Please sign in to comment.