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