Fix : 수정

This commit is contained in:
lsh9672
2025-06-12 18:34:02 +09:00
parent c281299d94
commit d92f6b7bac
7 changed files with 252 additions and 0 deletions
@@ -0,0 +1,33 @@
package com.ktds.hi.recommend.biz.domain;
import lombok.Builder;
import lombok.Getter;
/**
* 취향 태그 도메인 클래스
* 사용자 취향 태그 정보를 나타냄
*/
@Getter
@Builder
public class PreferenceTag {
private Long id;
private String tagName;
private String category;
private String icon;
private String description;
private boolean isActive;
/**
* 정적 팩토리 메서드 - 기본 태그 생성
*/
public static PreferenceTag of(String tagName, String category, String icon, String description) {
return PreferenceTag.builder()
.tagName(tagName)
.category(category)
.icon(icon)
.description(description)
.isActive(true)
.build();
}
}
@@ -1,9 +1,12 @@
package com.ktds.hi.recommend.biz.service;
import com.ktds.hi.recommend.biz.domain.PreferenceTag;
import com.ktds.hi.recommend.biz.usecase.in.TasteAnalysisUseCase;
import com.ktds.hi.recommend.biz.usecase.out.PreferenceTagRepository;
import com.ktds.hi.recommend.biz.usecase.out.UserPreferenceRepository;
import com.ktds.hi.recommend.biz.domain.TasteProfile;
import com.ktds.hi.recommend.biz.domain.TasteCategory;
import com.ktds.hi.recommend.infra.dto.response.PreferenceTagResponse;
import com.ktds.hi.recommend.infra.dto.response.TasteAnalysisResponse;
import com.ktds.hi.common.exception.BusinessException;
import lombok.RequiredArgsConstructor;
@@ -26,6 +29,7 @@ import java.util.stream.Collectors;
public class TasteAnalysisInteractor implements TasteAnalysisUseCase {
private final UserPreferenceRepository userPreferenceRepository;
private final PreferenceTagRepository preferenceTagRepository;
@Override
@Transactional(readOnly = true)
@@ -76,4 +80,25 @@ public class TasteAnalysisInteractor implements TasteAnalysisUseCase {
throw new BusinessException("취향 프로필 업데이트 중 오류가 발생했습니다: " + e.getMessage());
}
}
@Override
public List<PreferenceTagResponse> getAvailablePreferenceTags() {
log.info("가용한 취향 태그 목록 조회");
try {
List<PreferenceTag> tags = preferenceTagRepository.findAllActiveTags();
return tags.stream()
.map(tag -> PreferenceTagResponse.builder()
.tagName(tag.getTagName())
.icon(tag.getIcon())
.description(tag.getDescription())
.build())
.collect(Collectors.toList());
} catch (Exception e) {
log.error("취향 태그 목록 조회 중 오류 발생", e);
throw new BusinessException("취향 태그 목록 조회에 실패했습니다");
}
}
}
@@ -1,5 +1,8 @@
package com.ktds.hi.recommend.biz.usecase.in;
import java.util.List;
import com.ktds.hi.recommend.infra.dto.response.PreferenceTagResponse;
import com.ktds.hi.recommend.infra.dto.response.TasteAnalysisResponse;
/**
@@ -17,4 +20,9 @@ public interface TasteAnalysisUseCase {
* 취향 프로필 업데이트
*/
void updateTasteProfile(Long memberId);
/**
* 가용한 취향 태그 목록 조회
*/
List<PreferenceTagResponse> getAvailablePreferenceTags();
}
@@ -0,0 +1,33 @@
package com.ktds.hi.recommend.biz.usecase.out;
import com.ktds.hi.recommend.biz.domain.PreferenceTag;
import java.util.List;
import java.util.Optional;
/**
* 취향 태그 Repository 인터페이스
* 취향 태그 관련 데이터 액세스 기능을 정의
*/
public interface PreferenceTagRepository {
/**
* 활성화된 모든 취향 태그 조회
*/
List<PreferenceTag> findAllActiveTags();
/**
* 태그 ID로 태그 조회
*/
Optional<PreferenceTag> findById(Long tagId);
/**
* 태그명으로 태그 조회
*/
Optional<PreferenceTag> findByTagName(String tagName);
/**
* 카테고리별 태그 조회
*/
List<PreferenceTag> findByCategory(String category);
}