diff --git a/infra/sql/ddl.sql b/infra/sql/ddl.sql index 997b8a4a..b552128c 100644 --- a/infra/sql/ddl.sql +++ b/infra/sql/ddl.sql @@ -107,6 +107,7 @@ create table owned_menu_search ( menu_id bigint not null, modified_at datetime(6), user_id bigint not null, + map_id bigint not null, menu_title varchar(255) not null, store_address varchar(255) not null, store_title varchar(255) not null, diff --git a/src/main/java/com/ourmenu/backend/domain/cache/api/CacheController.java b/src/main/java/com/ourmenu/backend/domain/cache/api/CacheController.java index 58b59855..4018d4b1 100644 --- a/src/main/java/com/ourmenu/backend/domain/cache/api/CacheController.java +++ b/src/main/java/com/ourmenu/backend/domain/cache/api/CacheController.java @@ -2,9 +2,13 @@ import com.ourmenu.backend.domain.cache.application.CacheService; import com.ourmenu.backend.domain.cache.dto.GetCacheInfoResponse; +import com.ourmenu.backend.domain.cache.dto.GetMenuFolderIconResponse; +import com.ourmenu.backend.domain.cache.dto.GetMenuPinResponse; +import com.ourmenu.backend.domain.cache.dto.GetTagResponse; import com.ourmenu.backend.global.response.ApiResponse; import com.ourmenu.backend.global.response.util.ApiUtil; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -22,4 +26,25 @@ public ApiResponse getCacheInfo() { return ApiUtil.success(response); } + + @GetMapping("api/cache-data/menu-folder-icons") + public ApiResponse> getMenuFolderIconsResponse() { + List response = cacheService.getMenuFolderIcons(); + + return ApiUtil.success(response); + } + + @GetMapping("api/cache-data/menu-pins") + public ApiResponse> getMenuPinResponse() { + List response = cacheService.getMenuPins(); + + return ApiUtil.success(response); + } + + @GetMapping("api/cache-data/tags") + public ApiResponse> getTagResponse() { + List response = cacheService.getTags(); + + return ApiUtil.success(response); + } } diff --git a/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java b/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java index e9f19f97..a35d2997 100644 --- a/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java +++ b/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java @@ -4,6 +4,9 @@ import com.ourmenu.backend.domain.cache.domain.MenuFolderIcon; import com.ourmenu.backend.domain.cache.domain.MenuPin; import com.ourmenu.backend.domain.cache.dto.GetCacheInfoResponse; +import com.ourmenu.backend.domain.cache.dto.GetMenuFolderIconResponse; +import com.ourmenu.backend.domain.cache.dto.GetMenuPinResponse; +import com.ourmenu.backend.domain.cache.dto.GetTagResponse; import com.ourmenu.backend.domain.cache.dto.SimpleHomeImgResponse; import com.ourmenu.backend.domain.cache.dto.SimpleMenuFolderIconResponse; import com.ourmenu.backend.domain.cache.dto.SimpleMenuPinResponse; @@ -29,6 +32,31 @@ public GetCacheInfoResponse getCacheInfo() { return GetCacheInfoResponse.of(menuFolderIconInfo, menuPinInfo, homeImgInfo, tagInfo); } + + public List getMenuFolderIcons() { + List menuFolderIconsInfo = getMenuFolderIconInfo(); + + return menuFolderIconsInfo.stream() + .map(GetMenuFolderIconResponse::from) + .toList(); + } + + public List getMenuPins() { + List menuPinsInfo = getMenuPinInfo(); + + return menuPinsInfo.stream() + .map(GetMenuPinResponse::from) + .toList(); + } + + public List getTags() { + List tagsImgInfo = getTagImgInfo(); + + return tagsImgInfo.stream() + .map(GetTagResponse::from) + .toList(); + } + private List getMenuFolderIconInfo() { return Arrays.stream(MenuFolderIcon.values()) .map(menuFolderIcon -> { diff --git a/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuFolderIconResponse.java b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuFolderIconResponse.java new file mode 100644 index 00000000..b9ef8585 --- /dev/null +++ b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuFolderIconResponse.java @@ -0,0 +1,23 @@ +package com.ourmenu.backend.domain.cache.dto; + +import com.ourmenu.backend.domain.cache.domain.MenuFolderIcon; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(access = AccessLevel.PRIVATE) +@Getter +public class GetMenuFolderIconResponse { + + private MenuFolderIcon menuFolderIcon; + private String menuFolderIconUrl; + + public static GetMenuFolderIconResponse from(SimpleMenuFolderIconResponse simpleMenuFolderIconResponse) { + return GetMenuFolderIconResponse.builder() + .menuFolderIcon(simpleMenuFolderIconResponse.getMenuFolderIcon()) + .menuFolderIconUrl(simpleMenuFolderIconResponse.getMenuFolderIconUrl()) + .build(); + } +} diff --git a/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuPinResponse.java b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuPinResponse.java new file mode 100644 index 00000000..31f55735 --- /dev/null +++ b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetMenuPinResponse.java @@ -0,0 +1,25 @@ +package com.ourmenu.backend.domain.cache.dto; + +import com.ourmenu.backend.domain.cache.domain.MenuPin; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(access = AccessLevel.PRIVATE) +@Getter +public class GetMenuPinResponse { + + private MenuPin menuPin; + private String menuPinAddImgUrl; + private String menuPinAddDisableImgUrl; + + public static GetMenuPinResponse from(SimpleMenuPinResponse simpleMenuPinResponse) { + return GetMenuPinResponse.builder() + .menuPin(simpleMenuPinResponse.getMenuPin()) + .menuPinAddImgUrl(simpleMenuPinResponse.getMenuPinAddImgUrl()) + .menuPinAddDisableImgUrl(simpleMenuPinResponse.getMenuPinAddDisableImgUrl()) + .build(); + } +} diff --git a/src/main/java/com/ourmenu/backend/domain/cache/dto/GetTagResponse.java b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetTagResponse.java new file mode 100644 index 00000000..8e72977c --- /dev/null +++ b/src/main/java/com/ourmenu/backend/domain/cache/dto/GetTagResponse.java @@ -0,0 +1,25 @@ +package com.ourmenu.backend.domain.cache.dto; + +import com.ourmenu.backend.domain.tag.domain.Tag; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder(access = AccessLevel.PRIVATE) +@Getter +public class GetTagResponse { + + private Tag tag; + private String orangeTagImgUrl; + private String whiteTagImgUrl; + + public static GetTagResponse from(SimpleTagImgResponse simpleTagImgResponse) { + return GetTagResponse.builder() + .tag(simpleTagImgResponse.getTag()) + .orangeTagImgUrl(simpleTagImgResponse.getOrangeTagImgUrl()) + .whiteTagImgUrl(simpleTagImgResponse.getWhiteTagImgUrl()) + .build(); + } +} diff --git a/src/main/java/com/ourmenu/backend/domain/menu/api/MapController.java b/src/main/java/com/ourmenu/backend/domain/menu/api/MapController.java index c15e6451..9b839b4d 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/api/MapController.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/api/MapController.java @@ -2,7 +2,6 @@ import com.ourmenu.backend.domain.menu.application.MapService; import com.ourmenu.backend.domain.menu.dto.MapSearchDto; -import com.ourmenu.backend.domain.menu.dto.MapSearchHistoryDto; import com.ourmenu.backend.domain.menu.dto.MenuInfoOnMapDto; import com.ourmenu.backend.domain.menu.dto.MenuOnMapDto; import com.ourmenu.backend.domain.user.domain.CustomUserDetails; @@ -62,9 +61,9 @@ public ApiResponse findMenuInfoByMenuId(@PathVariable Long men @Operation(summary = "지도 검색 기록 조회", description = "지도에서 식당 검색 기록을 조회한다.") @GetMapping("/maps/search-history") - public ApiResponse> findSearchHistoryOnMap( + public ApiResponse> findSearchHistoryOnMap( @AuthenticationPrincipal CustomUserDetails userDetails) { - List response = mapService.findSearchHistoryOnMap(userDetails.getId()); + List response = mapService.findSearchHistoryOnMap(userDetails.getId()); return ApiUtil.success(response); } } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/api/MenuController.java b/src/main/java/com/ourmenu/backend/domain/menu/api/MenuController.java index d890255d..8e5b8794 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/api/MenuController.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/api/MenuController.java @@ -45,7 +45,7 @@ public ApiResponse saveMenu(@ModelAttribute SaveMenuRequest re @AuthenticationPrincipal CustomUserDetails userDetails) { request.initList(); SimpleSearchDto simpleSearchDto = searchService.getSearchDto(request.getIsCrawled(), request.getStoreId()); - MenuDto menuDto = MenuDto.of(request, request.getMenuFolderImgs(), userDetails, simpleSearchDto); + MenuDto menuDto = MenuDto.of(request, request.getMenuImgs(), userDetails, simpleSearchDto); SaveMenuResponse response = menuService.saveMenu(menuDto); return ApiUtil.success(response); } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java b/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java index f69866f7..f4a1b1be 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java @@ -8,7 +8,6 @@ import com.ourmenu.backend.domain.menu.domain.MenuFolder; import com.ourmenu.backend.domain.menu.domain.MenuImg; import com.ourmenu.backend.domain.menu.dto.MapSearchDto; -import com.ourmenu.backend.domain.menu.dto.MapSearchHistoryDto; import com.ourmenu.backend.domain.menu.dto.MenuFolderInfoOnMapDto; import com.ourmenu.backend.domain.menu.dto.MenuInfoOnMapDto; import com.ourmenu.backend.domain.menu.dto.MenuOnMapDto; @@ -20,11 +19,9 @@ import com.ourmenu.backend.domain.store.domain.Map; import com.ourmenu.backend.domain.tag.dao.MenuTagRepository; import com.ourmenu.backend.domain.tag.domain.MenuTag; -import com.ourmenu.backend.domain.user.dao.UserRepository; -import com.ourmenu.backend.domain.user.domain.User; -import com.ourmenu.backend.domain.user.exception.NotFoundUserException; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,7 +29,6 @@ import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; import org.locationtech.jts.geom.PrecisionModel; -import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -45,7 +41,6 @@ public class MapService { private final MenuRepository menuRepository; - private final UserRepository userRepository; private final MapRepository mapRepository; private final MenuTagRepository menuTagRepository; private final MenuImgRepository menuImgRepository; @@ -60,8 +55,6 @@ public class MapService { * @return */ public List findMenusOnMap(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(NotFoundUserException::new); List menus = menuRepository.findMenusByUserId(userId); java.util.Map> menuMaps = menus.stream() @@ -99,15 +92,12 @@ public List findMenuOnMap(Long mapId, Long userId) { * @return */ public List findSearchResultOnMap(String title, double mapX, double mapY, Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(NotFoundUserException::new); - GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326); Point userLocation = geometryFactory.createPoint(new Coordinate(mapX, mapY)); PageRequest pageRequest = PageRequest.of(0, 10); - Page menusByUserIdOrderByDistance = + List menusByUserIdOrderByDistance = menuRepository.findByUserIdTitleContainingOrderByDistance(userId, title, userLocation, pageRequest); return menusByUserIdOrderByDistance.stream() @@ -121,21 +111,16 @@ public List findSearchResultOnMap(String title, double mapX, doubl * @param userId * @return */ - public List findSearchHistoryOnMap(Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(NotFoundUserException::new); - + public List findSearchHistoryOnMap(Long userId) { Pageable pageable = PageRequest.of( - 0, - 10, - Sort.by(Sort.Direction.DESC, "modifiedAt") + 0, 10, Sort.by(Sort.Direction.DESC, "modifiedAt") ); - Page searchHistoryPage = ownedMenuSearchRepository + List searchHistoryPage = ownedMenuSearchRepository .findByUserId(userId, pageable); return searchHistoryPage.stream() - .map(MapSearchHistoryDto::from) + .map(MapSearchDto::from) .collect(Collectors.toList()); } @@ -148,9 +133,6 @@ public List findSearchHistoryOnMap(Long userId) { */ @Transactional public MenuInfoOnMapDto findMenuByMenuIdOnMap(Long menuId, Long userId) { - User user = userRepository.findById(userId) - .orElseThrow(NotFoundUserException::new); - Menu menu = menuRepository.findByIdAndUserId(menuId, userId) .orElseThrow(NotFoundMenuException::new); @@ -187,7 +169,15 @@ private MenuInfoOnMapDto getMenuInfo(Menu menu) { * @param menu */ private void saveOwnedMenuSearchHistory(Long userId, Menu menu) { + Optional searchHistory = ownedMenuSearchRepository.findByUserIdAndMenuId(userId, menu.getId()); + + if (searchHistory.isPresent()) { + searchHistory.get().updateModifiedAt(); + return; + } + OwnedMenuSearch ownedMenuSearch = OwnedMenuSearch.builder() + .mapId(menu.getStore().getMap().getId()) .menuId(menu.getId()) .menuTitle(menu.getTitle()) .storeTitle(menu.getStore().getTitle()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dao/MenuRepository.java b/src/main/java/com/ourmenu/backend/domain/menu/dao/MenuRepository.java index c0eeff4b..84d98ec6 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dao/MenuRepository.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dao/MenuRepository.java @@ -19,6 +19,13 @@ public interface MenuRepository extends JpaRepository { boolean existsByStore(Store store); + @Query(""" + SELECT m + FROM Menu m + JOIN FETCH m.store s + JOIN FETCH s.map map + WHERE m.userId = :userId + """) List findMenusByUserId(Long userId); List findMenusByStoreIdAndUserId(Long storeId, Long userId); @@ -27,8 +34,6 @@ public interface MenuRepository extends JpaRepository { Optional findByIdAndUserId(Long menuId, Long userId); - List findByUserIdAndStoreId(Long userId, Long storeId); - int countByUserId(Long userId); @Query(value = """ @@ -264,23 +269,20 @@ List findByUserIdAndTag(@Param("userId") Long userId, @Param("tag") String tag, Pageable pageable); - @Query( - value = "SELECT m.* FROM menu m " + - "JOIN store s ON m.store_id = s.id " + - "JOIN map ON s.map_id = map.id " + - "WHERE m.user_id = :userId " + - "AND LOWER(m.title) LIKE CONCAT('%', LOWER(:title), '%') " + - "ORDER BY ST_Distance_Sphere(map.location, :userLocation) ASC", - countQuery = "SELECT COUNT(*) FROM menu m " + - "JOIN store s ON m.store_id = s.id " + - "JOIN map ON s.map_id = map.id " + - "WHERE m.user_id = :userId " + - "AND LOWER(m.title) LIKE CONCAT('%', LOWER(:title), '%')", - nativeQuery = true - ) - Page findByUserIdTitleContainingOrderByDistance(@Param("userId") Long userId, - @Param("title") String title, - @Param("userLocation") Point userLocation, - Pageable pageable); + @Query(value = """ + SELECT m.* + FROM menu m + JOIN store s ON m.store_id = s.id + JOIN map ON s.map_id = map.id + WHERE m.user_id = :userId + AND LOWER(m.title) LIKE CONCAT('%', LOWER(:title), '%') + ORDER BY ST_Distance_Sphere(map.location, :userLocation) ASC + """, nativeQuery = true) + List findByUserIdTitleContainingOrderByDistance( + @Param("userId") Long userId, + @Param("title") String title, + @Param("userLocation") Point userLocation, + Pageable pageable + ); } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchDto.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchDto.java index 75d818fc..4aa9b356 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchDto.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchDto.java @@ -12,12 +12,16 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) public class MapSearchDto { + private Long mapId; + private Long menuId; private String menuTitle; private String storeTitle; private String storeAddress; public static MapSearchDto from(Menu menu){ return MapSearchDto.builder() + .mapId(menu.getStore().getMap().getId()) + .menuId(menu.getId()) .menuTitle(menu.getTitle()) .storeTitle(menu.getStore().getTitle()) .storeAddress(menu.getStore().getAddress()) @@ -26,6 +30,8 @@ public static MapSearchDto from(Menu menu){ public static MapSearchDto from(OwnedMenuSearch ownedMenuSearch){ return MapSearchDto.builder() + .mapId(ownedMenuSearch.getMapId()) + .menuId(ownedMenuSearch.getMenuId()) .menuTitle(ownedMenuSearch.getMenuTitle()) .storeTitle(ownedMenuSearch.getStoreTitle()) .storeAddress(ownedMenuSearch.getStoreAddress()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchHistoryDto.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchHistoryDto.java deleted file mode 100644 index 02a26286..00000000 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MapSearchHistoryDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.ourmenu.backend.domain.menu.dto; - -import com.ourmenu.backend.domain.search.domain.OwnedMenuSearch; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -import java.time.LocalDateTime; - -@Getter -@Builder(access = AccessLevel.PRIVATE) -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class MapSearchHistoryDto { - - private Long menuId; - private String menuTitle; - private String storeTitle; - private String storeAddress; - - public static MapSearchHistoryDto from(OwnedMenuSearch ownedMenuSearch){ - return MapSearchHistoryDto.builder() - .menuId(ownedMenuSearch.getMenuId()) - .menuTitle(ownedMenuSearch.getMenuTitle()) - .storeTitle(ownedMenuSearch.getStoreTitle()) - .storeAddress(ownedMenuSearch.getStoreAddress()) - .build(); - } -} diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuRequest.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuRequest.java index e4bc979b..a91c0a14 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuRequest.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuRequest.java @@ -12,7 +12,7 @@ @Getter public class SaveMenuRequest { - List menuFolderImgs; + List menuImgs; private String menuTitle; private int menuPrice; private MenuPin menuPin; @@ -27,8 +27,8 @@ public class SaveMenuRequest { * request 에 null 들어오는 경우에 대해서 request 초기화 swagger 를 위한 메서드 */ public void initList() { - if (menuFolderImgs == null) { - menuFolderImgs = new ArrayList<>(); + if (menuImgs == null) { + menuImgs = new ArrayList<>(); } if (menuFolderIds == null) { menuFolderIds = new ArrayList<>(); diff --git a/src/main/java/com/ourmenu/backend/domain/search/dao/OwnedMenuSearchRepository.java b/src/main/java/com/ourmenu/backend/domain/search/dao/OwnedMenuSearchRepository.java index 69e6ff54..2c26592c 100644 --- a/src/main/java/com/ourmenu/backend/domain/search/dao/OwnedMenuSearchRepository.java +++ b/src/main/java/com/ourmenu/backend/domain/search/dao/OwnedMenuSearchRepository.java @@ -1,11 +1,16 @@ package com.ourmenu.backend.domain.search.dao; import com.ourmenu.backend.domain.search.domain.OwnedMenuSearch; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + +import java.util.List; + public interface OwnedMenuSearchRepository extends JpaRepository { - Page findByUserId(Long userId, Pageable pageable); + Optional findByUserIdAndMenuId(Long userId, Long menuId); + + List findByUserId(Long userId, Pageable pageable); } diff --git a/src/main/java/com/ourmenu/backend/domain/search/domain/OwnedMenuSearch.java b/src/main/java/com/ourmenu/backend/domain/search/domain/OwnedMenuSearch.java index 223cf16f..e8aa9318 100644 --- a/src/main/java/com/ourmenu/backend/domain/search/domain/OwnedMenuSearch.java +++ b/src/main/java/com/ourmenu/backend/domain/search/domain/OwnedMenuSearch.java @@ -6,8 +6,6 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; -import jakarta.validation.constraints.NotNull; -import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -26,18 +24,15 @@ public class OwnedMenuSearch extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @NotNull private Long menuId; - @NotNull private String menuTitle; - @NotNull private String storeTitle; - @NotNull private String storeAddress; - @NotNull private Long userId; + + private Long mapId; } diff --git a/src/main/java/com/ourmenu/backend/domain/store/dao/MapRepository.java b/src/main/java/com/ourmenu/backend/domain/store/dao/MapRepository.java index 8c93c2d2..d7cd045e 100644 --- a/src/main/java/com/ourmenu/backend/domain/store/dao/MapRepository.java +++ b/src/main/java/com/ourmenu/backend/domain/store/dao/MapRepository.java @@ -5,6 +5,7 @@ import org.locationtech.jts.geom.Point; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository @@ -12,5 +13,11 @@ public interface MapRepository extends JpaRepository { Optional findByLocation(Point location); + @Query(""" + SELECT m + FROM Map m + JOIN FETCH m.stores s + WHERE m.id = :mapId + """) Optional findMapById(Long mapId); } diff --git a/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java b/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java index 7638d15a..2a73efe5 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java +++ b/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java @@ -23,7 +23,6 @@ import com.ourmenu.backend.domain.user.exception.NotMatchPasswordException; import com.ourmenu.backend.domain.user.exception.NotMatchTokenException; import com.ourmenu.backend.domain.user.exception.TokenExpiredExcpetion; -import com.ourmenu.backend.domain.user.exception.UnsupportedSignInTypeException; import com.ourmenu.backend.global.util.JwtTokenProvider; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/main/java/com/ourmenu/backend/global/config/SecurityConfig.java b/src/main/java/com/ourmenu/backend/global/config/SecurityConfig.java index 30dc1d13..b1020f1b 100644 --- a/src/main/java/com/ourmenu/backend/global/config/SecurityConfig.java +++ b/src/main/java/com/ourmenu/backend/global/config/SecurityConfig.java @@ -38,7 +38,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .logout(AbstractHttpConfigurer::disable) .authorizeHttpRequests(authorize -> authorize - .requestMatchers("/api/users/sign-up", "/api/users/sign-in", "/api/users/auth/kakao", "/api/users/reissue-token") + .requestMatchers("/api/users/sign-up", "/api/users/sign-in", "/api/users/auth/kakao", + "/api/users/reissue-token") .permitAll() .requestMatchers("/api/emails/**").permitAll() .requestMatchers("/swagger-ui/**", "/swagger-resources/**", "/v3/api-docs/**").permitAll() @@ -68,6 +69,7 @@ public WebSecurityCustomizer webSecurityCustomizer() { "/api/users/sign-in", "/api/users/reissue-token", "/api/cache-data", + "/api/cache-data/**", "/api/emails/**", "/swagger-ui/**", "/swagger-resources/**",