tag update
This commit is contained in:
parent
d53604d24a
commit
dafaeba5d8
BIN
logs/recommend-service.log.2025-06-16.0.gz
Normal file
BIN
logs/recommend-service.log.2025-06-16.0.gz
Normal file
Binary file not shown.
@ -29,10 +29,10 @@ public class TagService implements TagUseCase {
|
||||
private final TagRepositoryPort tagRepositoryPort;
|
||||
|
||||
@Override
|
||||
public List<TopClickedTagResponse> getTopClickedTags() {
|
||||
public List<TopClickedTagResponse> getTopClickedTags(Integer storeId) {
|
||||
log.info("가장 많이 클릭된 상위 5개 태그 조회 시작");
|
||||
|
||||
List<Tag> topTags = tagRepositoryPort.findTopClickedTags();
|
||||
List<Tag> topTags = tagRepositoryPort.findTopClickedTags(storeId);
|
||||
|
||||
AtomicInteger rank = new AtomicInteger(1);
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ public interface TagUseCase {
|
||||
/**
|
||||
* 가장 많이 클릭된 상위 5개 태그 조회
|
||||
*/
|
||||
List<TopClickedTagResponse> getTopClickedTags();
|
||||
List<TopClickedTagResponse> getTopClickedTags(Integer storeId);
|
||||
|
||||
/**
|
||||
* 태그 클릭 이벤트 처리
|
||||
|
||||
@ -1,108 +1,108 @@
|
||||
package com.ktds.hi.store.biz.usecase.out;
|
||||
package com.ktds.hi.store.biz.usecase.out;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 외부 플랫폼 포트 인터페이스
|
||||
* 외부 플랫폼 연동 기능을 정의
|
||||
*
|
||||
* @author 하이오더 개발팀
|
||||
* @version 1.0.0
|
||||
*/
|
||||
public interface ExternalPlatformPort {
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 네이버 리뷰 동기화
|
||||
* 외부 플랫폼 포트 인터페이스
|
||||
* 외부 플랫폼 연동 기능을 정의
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
* @author 하이오더 개발팀
|
||||
* @version 1.0.0
|
||||
*/
|
||||
int syncNaverReviews(Long storeId, String externalStoreId);
|
||||
public interface ExternalPlatformPort {
|
||||
|
||||
/**
|
||||
* 카카오 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncKakaoReviews(Long storeId, String externalStoreId);
|
||||
/**
|
||||
* 네이버 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncNaverReviews(Long storeId, String externalStoreId);
|
||||
|
||||
/**
|
||||
* 구글 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncGoogleReviews(Long storeId, String externalStoreId);
|
||||
/**
|
||||
* 카카오 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncKakaoReviews(Long storeId, String externalStoreId);
|
||||
|
||||
/**
|
||||
* 하이오더 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncHiorderReviews(Long storeId, String externalStoreId);
|
||||
/**
|
||||
* 구글 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncGoogleReviews(Long storeId, String externalStoreId);
|
||||
|
||||
/**
|
||||
* 네이버 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectNaverAccount(Long storeId, String username, String password);
|
||||
/**
|
||||
* 하이오더 리뷰 동기화
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param externalStoreId 외부 매장 ID
|
||||
* @return 동기화된 리뷰 수
|
||||
*/
|
||||
int syncHiorderReviews(Long storeId, String externalStoreId);
|
||||
|
||||
/**
|
||||
* 카카오 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectKakaoAccount(Long storeId, String username, String password);
|
||||
/**
|
||||
* 네이버 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectNaverAccount(Long storeId, String username, String password);
|
||||
|
||||
/**
|
||||
* 구글 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectGoogleAccount(Long storeId, String username, String password);
|
||||
/**
|
||||
* 카카오 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectKakaoAccount(Long storeId, String username, String password);
|
||||
|
||||
/**
|
||||
* 하이오더 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectHiorderAccount(Long storeId, String username, String password);
|
||||
/**
|
||||
* 구글 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectGoogleAccount(Long storeId, String username, String password);
|
||||
|
||||
/**
|
||||
* 외부 플랫폼 연동 해제
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param platform 플랫폼명 (NAVER, KAKAO, GOOGLE, HIORDER)
|
||||
* @return 연동 해제 성공 여부
|
||||
*/
|
||||
boolean disconnectPlatform(Long storeId, String platform);
|
||||
/**
|
||||
* 연동된 플랫폼 목록 조회
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @return 연동된 플랫폼 목록
|
||||
*/
|
||||
List<String> getConnectedPlatforms(Long storeId);
|
||||
/**
|
||||
* 하이오더 계정 연동
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param username 사용자명
|
||||
* @param password 비밀번호
|
||||
* @return 연동 성공 여부
|
||||
*/
|
||||
boolean connectHiorderAccount(Long storeId, String username, String password);
|
||||
|
||||
public List<Map<String, Object>> getTempReviews(Long storeId, String platform);
|
||||
}
|
||||
/**
|
||||
* 외부 플랫폼 연동 해제
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @param platform 플랫폼명 (NAVER, KAKAO, GOOGLE, HIORDER)
|
||||
* @return 연동 해제 성공 여부
|
||||
*/
|
||||
boolean disconnectPlatform(Long storeId, String platform);
|
||||
/**
|
||||
* 연동된 플랫폼 목록 조회
|
||||
*
|
||||
* @param storeId 매장 ID
|
||||
* @return 연동된 플랫폼 목록
|
||||
*/
|
||||
List<String> getConnectedPlatforms(Long storeId);
|
||||
|
||||
public List<Map<String, Object>> getTempReviews(Long storeId, String platform);
|
||||
}
|
||||
@ -33,7 +33,7 @@ public interface TagRepositoryPort {
|
||||
/**
|
||||
* 가장 많이 클릭된 상위 5개 태그 조회
|
||||
*/
|
||||
List<Tag> findTopClickedTags();
|
||||
List<Tag> findTopClickedTags(Integer storeId);
|
||||
|
||||
/**
|
||||
* 태그 클릭 수 증가
|
||||
|
||||
@ -29,11 +29,11 @@ public class TagController {
|
||||
/**
|
||||
* 가장 많이 클릭된 상위 5개 태그 조회 API
|
||||
*/
|
||||
@GetMapping("/top-clicked")
|
||||
@GetMapping("/top-clicked/{storeId}")
|
||||
@Operation(summary = "인기 태그 조회", description = "가장 많이 클릭된 상위 5개 태그를 조회합니다.")
|
||||
public ResponseEntity<ApiResponse<List<TopClickedTagResponse>>> getTopClickedTags() {
|
||||
public ResponseEntity<ApiResponse<List<TopClickedTagResponse>>> getTopClickedTags(Integer storeId) {
|
||||
|
||||
List<TopClickedTagResponse> topTags = tagUseCase.getTopClickedTags();
|
||||
List<TopClickedTagResponse> topTags = tagUseCase.getTopClickedTags(storeId);
|
||||
|
||||
return ResponseEntity.ok(ApiResponse.success(topTags));
|
||||
}
|
||||
|
||||
@ -67,6 +67,8 @@ public class ExternalPlatformAdapter implements ExternalPlatformPort {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//*****//
|
||||
@Override
|
||||
public int syncKakaoReviews(Long storeId, String externalStoreId) {
|
||||
log.info("카카오 리뷰 동기화 시작: storeId={}, externalStoreId={}", storeId, externalStoreId);
|
||||
|
||||
@ -57,10 +57,10 @@ public class TagRepositoryAdapter implements TagRepositoryPort {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Tag> findTopClickedTags() {
|
||||
public List<Tag> findTopClickedTags(Integer storeId) {
|
||||
log.info("가장 많이 클릭된 상위 5개 태그 조회");
|
||||
|
||||
List<TagEntity> entities = tagJpaRepository.findTop5ByOrderByClickCountDesc(
|
||||
List<TagEntity> entities = tagJpaRepository.findTop5ByOrderByClickCountDesc(storeId,
|
||||
PageRequest.of(0, 5)
|
||||
);
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import com.ktds.hi.store.domain.TagCategory;
|
||||
import com.ktds.hi.store.infra.gateway.entity.TagEntity;
|
||||
import io.lettuce.core.dynamic.annotation.Param;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
@ -55,6 +56,6 @@ public interface TagJpaRepository extends JpaRepository<TagEntity, Long> {
|
||||
/**
|
||||
* 클릭 수 기준 상위 5개 태그 조회
|
||||
*/
|
||||
@Query("SELECT t FROM TagEntity t WHERE t.isActive = true ORDER BY t.clickCount DESC")
|
||||
List<TagEntity> findTop5ByOrderByClickCountDesc(PageRequest pageRequest);
|
||||
@Query("SELECT t FROM TagEntity t JOIN t.stores s WHERE s.id = :storeId AND t.isActive = true ORDER BY t.clickCount DESC")
|
||||
List<TagEntity> findTop5ByStoreIdOrderByClickCountDesc(@Param("storeId") Long storeId, Pageable pageable); List<TagEntity> findTop5ByOrderByClickCountDesc(Integer storeId, PageRequest pageRequest);
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ spring:
|
||||
eventhub:
|
||||
connection-string: ${AZURE_EVENTHUB_CONNECTION_STRING}
|
||||
|
||||
|
||||
data:
|
||||
redis:
|
||||
host: ${REDIS_HOST:localhost}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user