store update

This commit is contained in:
youbeen
2025-06-16 15:35:18 +09:00
parent 1ddcfc3ad3
commit a84ee30c71
4 changed files with 41 additions and 3 deletions
@@ -14,6 +14,16 @@ import java.util.Optional;
*/
public interface StoreRepositoryPort {
/**
* 태그로 매장 검색 (OR 조건)
*/
List<Store> findStoresByTagNames(List<String> tagNames);
/**
* 모든 태그를 포함하는 매장 검색 (AND 조건)
*/
List<Store> findStoresByAllTagNames(List<String> tagNames);
/**
* 점주 ID로 매장 목록 조회
*
@@ -38,6 +38,22 @@ public class StoreRepositoryAdapter implements StoreRepositoryPort {
.collect(Collectors.toList());
}
@Override
public List<Store> findStoresByTagNames(List<String> tagNames) {
return storeJpaRepository.findByTagNamesIn(tagNames)
.stream()
.map(this::toDomain)
.collect(Collectors.toList());
}
@Override
public List<Store> findStoresByAllTagNames(List<String> tagNames) {
return storeJpaRepository.findByAllTagNames(tagNames, tagNames.size())
.stream()
.map(this::toDomain)
.collect(Collectors.toList());
}
@Override
public Optional<Store> findStoreById(Long storeId) {
return storeJpaRepository.findById(storeId)
@@ -21,6 +21,9 @@ import java.util.Optional;
@Repository
public interface StoreJpaRepository extends JpaRepository<StoreEntity, Long> {
@Query("SELECT s FROM StoreEntity s WHERE s.status = 'ACTIVE' ORDER BY s.rating DESC")
Page<StoreEntity> findAllByOrderByRatingDesc(Pageable pageable);
/**
* 점주 ID로 매장 목록 조회
*/
@@ -49,9 +52,18 @@ public interface StoreJpaRepository extends JpaRepository<StoreEntity, Long> {
/**
* 평점 기준 내림차순으로 매장 조회
*/
@Query("SELECT s FROM StoreEntity s ORDER BY s.rating DESC")
Page<StoreEntity> findAllByOrderByRatingDesc(Pageable pageable);
@Query(value = "SELECT DISTINCT s.* FROM stores s " +
"WHERE EXISTS (SELECT 1 FROM store_tags st " +
"WHERE st.store_id = s.id AND st.tag_name IN :tagNames) " +
"AND s.status = 'ACTIVE'", nativeQuery = true)
List<StoreEntity> findByTagNamesIn(@Param("tagNames") List<String> tagNames);
@Query(value = "SELECT s.* FROM stores s " +
"WHERE (SELECT COUNT(DISTINCT st.tag_name) FROM store_tags st " +
"WHERE st.store_id = s.id AND st.tag_name IN :tagNames) = :tagCount " +
"AND s.status = 'ACTIVE'", nativeQuery = true)
List<StoreEntity> findByAllTagNames(@Param("tagNames") List<String> tagNames,
@Param("tagCount") Integer tagCount);
/**
* 점주별 매장 수 조회
*/