Skip to content

Commit

Permalink
[fix] 맛집 상세조회 시 거리 차이 정보 표시 및 그룹 조회 시 멤버,맛집 수 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
boo105 committed Mar 1, 2024
1 parent c40b263 commit ffb648e
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public class FindGroupResponse {
private boolean isPrivateGroup;
private String groupProfileImageUrl;
private String groupBackgroundImageUrl;
private int memberCnt;
private int restaurantCnt;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.gdsc.jmt.domain.group.repository.GroupUserRepository;
import com.gdsc.jmt.domain.restaurant.query.entity.RecommendRestaurantEntity;
import com.gdsc.jmt.domain.restaurant.query.entity.RestaurantPhotoEntity;
import com.gdsc.jmt.domain.restaurant.query.repository.RecommendRestaurantRepository;
import com.gdsc.jmt.domain.user.query.entity.UserEntity;
import com.gdsc.jmt.domain.user.query.repository.UserRepository;
import com.gdsc.jmt.global.exception.ApiException;
Expand Down Expand Up @@ -38,6 +39,8 @@ public class GroupService {
private final GroupRepository groupRepository;
private final GroupUserRepository groupUserRepository;

private final RecommendRestaurantRepository recommendRestaurantRepository;

private final S3FileService s3FileService;

@Transactional
Expand Down Expand Up @@ -75,13 +78,18 @@ public FindGroupResponse findGroupById(long groupId) {
}
GroupEntity groupEntity = groupEntityResult.get();

int memberCnt = groupUserRepository.countByGroupId(groupId);
int restaurantCnt = recommendRestaurantRepository.countByGroup(groupEntity);

return FindGroupResponse.builder()
.groupId(groupEntity.getGid())
.groupName(groupEntity.getGroupName())
.groupIntroduce(groupEntity.getGroupIntroduce())
.isPrivateGroup(groupEntity.isPrivateFlag())
.groupBackgroundImageUrl(groupEntity.getGroupBackgroundImageUrl())
.groupProfileImageUrl(groupEntity.getGroupProfileImageUrl())
.memberCnt(memberCnt)
.restaurantCnt(restaurantCnt)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public interface GroupUserRepository extends JpaRepository<GroupUsersEntity, Lon
List<GroupUsersEntity> findByUserId(long userId);

Optional<GroupUsersEntity> findByGroupIdAndUserId(long groupId, long userId);

int countByGroupId(long groupId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
import com.gdsc.jmt.domain.restaurant.command.dto.request.CreateRestaurantReviewRequest;
import com.gdsc.jmt.domain.restaurant.query.controller.springdocs.FindAllRestaurantSpringDocs;
import com.gdsc.jmt.domain.restaurant.query.controller.springdocs.FindRestaurantsByUserIdSpringDocs;
import com.gdsc.jmt.domain.restaurant.query.dto.request.RestaurantSearchInUserIdRequest;
import com.gdsc.jmt.domain.restaurant.query.dto.request.RestaurantSearchRequest;
import com.gdsc.jmt.domain.restaurant.query.dto.request.*;
import com.gdsc.jmt.domain.restaurant.query.dto.response.*;
import com.gdsc.jmt.domain.restaurant.query.controller.springdocs.CheckRecommendRestaurantExistingSpringDocs;
import com.gdsc.jmt.domain.restaurant.query.controller.springdocs.FindRestaurantLocationSpringDocs;
import com.gdsc.jmt.domain.restaurant.query.dto.request.FindRestaurantLocationListRequest;
import com.gdsc.jmt.domain.restaurant.query.dto.request.RestaurantSearchMapRequest;
import com.gdsc.jmt.domain.restaurant.query.service.RestaurantFilterService;
import com.gdsc.jmt.domain.restaurant.query.service.RestaurantQueryService;
import com.gdsc.jmt.domain.restaurant.util.KakaoSearchDocumentResponse;
Expand Down Expand Up @@ -65,10 +62,10 @@ public JMTApiResponse<?> checkRecommendRestaurantExisting(@PathVariable String k
return JMTApiResponse.createResponseWithMessage(true, RestaurantMessage.RECOMMEND_RESTAURANT_REGISTERABLE);
}

@GetMapping("restaurant/{recommendRestaurantId}")
@PostMapping("restaurant/{recommendRestaurantId}")
@FindDetailRestaurantSpringDocs
public JMTApiResponse<?> getDetailRestaurant(@PathVariable Long recommendRestaurantId) {
FindDetailRestaurantItem response = restaurantQueryService.findDetailRestaurant(recommendRestaurantId);
public JMTApiResponse<FindDetailRestaurantItem> getDetailRestaurant(@PathVariable Long recommendRestaurantId, @RequestBody FindDetailRestaurantRequest request) {
FindDetailRestaurantItem response = restaurantQueryService.findDetailRestaurant(recommendRestaurantId, request);
return JMTApiResponse.createResponseWithMessage(response, RestaurantMessage.DETAIL_RESTAURANT_FIND_SUCCESS);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.gdsc.jmt.domain.restaurant.query.dto.request;

import lombok.Data;

@Data
public class FindDetailRestaurantRequest {
private MapLocation userLocation;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public record FindDetailRestaurantItem(
//식당 등록한 유저 정보
Long userId,
String userNickName,
String userProfileImageUrl
String userProfileImageUrl,

String differenceInDistance
) { }
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void initPictures(List<RestaurantPhotoEntity> pictures) {
this.pictures = pictures;
}

public FindDetailRestaurantItem toResponse() {
public FindDetailRestaurantItem toResponse(String differenceInDistance) {
return new FindDetailRestaurantItem(
this.restaurant.getName(),
this.restaurant.getPlaceUrl(),
Expand All @@ -96,7 +96,8 @@ public FindDetailRestaurantItem toResponse() {
this.pictures.stream().map(RestaurantPhotoEntity::getImageUrl).toList(),
this.user.getId(),
this.user.getNickname(),
this.user.getProfileImageUrl()
this.user.getProfileImageUrl(),
differenceInDistance
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.gdsc.jmt.domain.restaurant.query.entity.calculate;

import com.gdsc.jmt.domain.restaurant.query.dto.response.FindDetailRestaurantItem;
import com.gdsc.jmt.domain.restaurant.query.dto.response.FindRestaurantItems;
import com.gdsc.jmt.domain.restaurant.query.entity.RecommendRestaurantEntity;

Expand All @@ -21,4 +22,8 @@ public RecommendRestaurantWithDistanceDTO(RecommendRestaurantEntity recommendRes
public FindRestaurantItems convertToFindItems() {
return FindRestaurantItems.createWithDistance(recommendRestaurant.convertToFindItems(), differenceInDistance);
}

public FindDetailRestaurantItem convertDetailItem() {
return this.recommendRestaurant.toResponse(this.differenceInDistance);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.gdsc.jmt.domain.restaurant.query.repository;

import com.gdsc.jmt.domain.group.entity.GroupEntity;
import com.gdsc.jmt.domain.restaurant.query.entity.RecommendRestaurantEntity;
import com.gdsc.jmt.domain.restaurant.query.entity.RestaurantEntity;
import com.gdsc.jmt.domain.restaurant.query.entity.calculate.RecommendRestaurantWithDistanceDTO;
Expand All @@ -16,6 +17,13 @@
import org.springframework.lang.Nullable;

public interface RecommendRestaurantRepository extends JpaRepository<RecommendRestaurantEntity, Long>, JpaSpecificationExecutor<RecommendRestaurantEntity> {


@Query("select NEW com.gdsc.jmt.domain.restaurant.query.entity.calculate.RecommendRestaurantWithDistanceDTO(reRestaurant, ST_DISTANCE_SPHERE(reRestaurant.restaurant.location, ST_GeomFromText(:userLocation))) " +
"from RecommendRestaurantEntity reRestaurant " +
"where reRestaurant.id = :id")
Optional<RecommendRestaurantWithDistanceDTO> findByIdWithUserLocation(Long id, String userLocation);

Optional<RecommendRestaurantEntity> findByRestaurant(RestaurantEntity restaurant);

@Query("select NEW com.gdsc.jmt.domain.restaurant.query.entity.calculate.RecommendRestaurantWithDistanceDTO(reRestaurant, ST_DISTANCE_SPHERE(reRestaurant.restaurant.location, ST_GeomFromText(:userLocation))) " +
Expand All @@ -27,4 +35,6 @@ public interface RecommendRestaurantRepository extends JpaRepository<RecommendRe
@Override
@EntityGraph(attributePaths = {"restaurant"})
Page<RecommendRestaurantEntity> findAll(Specification<RecommendRestaurantEntity> spec, Pageable pageable);

int countByGroup(GroupEntity group);
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,13 @@ private RestaurantEntity findRestaurant(final String kakaoSubId) {
return isExisting.orElse(null);
}

public FindDetailRestaurantItem findDetailRestaurant(Long recommendRestaurantId) {
Optional<RecommendRestaurantEntity> isExisting = recommendRestaurantRepository.findById(recommendRestaurantId);
public FindDetailRestaurantItem findDetailRestaurant(Long recommendRestaurantId, FindDetailRestaurantRequest request) {
String userLocation = "POINT(" + request.getUserLocation().x() + " " + request.getUserLocation().y() + ")";
Optional<RecommendRestaurantWithDistanceDTO> isExisting = recommendRestaurantRepository.findByIdWithUserLocation(recommendRestaurantId, userLocation);
if(isExisting.isEmpty()) {
throw new ApiException(RestaurantMessage.RECOMMEND_RESTAURANT_NOT_FOUND);
}
return isExisting.get().toResponse();
return isExisting.get().convertDetailItem();
}

public FindAllRestaurantResponse findAll(final Pageable pageable) {
Expand Down

0 comments on commit ffb648e

Please sign in to comment.