[251013] chore(config): [251013] appinfo.webos.json 추가

🕐 커밋 시간: 2025. 10. 13. 18:31:49

📊 변경 통계:
  • 총 파일: 2개
  • 추가: +53줄
  • 삭제: -6줄

📁 추가된 파일:
  + com.twin.app.shoptime/webos-meta/appinfo.webos.json

📝 수정된 파일:
  ~ com.twin.app.shoptime/src/hooks/useReviews/useReviews.js

🔧 주요 변경 내용:
  • 핵심 비즈니스 로직 개선
  • 소규모 기능 개선
This commit is contained in:
2025-10-13 18:31:51 +09:00
parent 0ac32d4b3d
commit 8c28f3ba8b
2 changed files with 82 additions and 6 deletions

View File

@@ -232,8 +232,40 @@ const useReviews = (prdtId, patnrId) => {
}; };
} }
// 별점이 없는 리뷰들 찾기
const noStarReviews = allReviews.filter((review) => {
const rating = review.rvwScr || review.rvwRtng || review.rating;
return !rating || rating === 0;
});
// 별점이 없는 리뷰들 로그 출력
if (noStarReviews.length > 0) {
console.log('[UserReviews]-NoStar 별점 없는 리뷰들:', {
totalReviews: allReviews.length,
noStarCount: noStarReviews.length,
noStarReviews: noStarReviews.map((review) => ({
rvwId: review.rvwId,
rvwScr: review.rvwScr,
rvwRtng: review.rvwRtng,
rating: review.rating,
rvwCtnt: review.rvwCtnt?.substring(0, 50) + '...',
wrtrNknm: review.wrtrNknm,
})),
});
}
// 별점이 있는 리뷰만 카운트 (1~5점)
let ratingSum = 0;
for (let i = 1; i <= 5; i++) {
const count = allReviews.filter((review) => {
const rating = review.rvwScr || review.rvwRtng || review.rating || 0;
return Math.round(rating) === i;
}).length;
ratingSum += count;
}
const counts = { const counts = {
rating: { all: allReviews.length }, rating: { all: ratingSum }, // 별점이 있는 리뷰만 카운트
keyword: {}, keyword: {},
sentiment: {}, sentiment: {},
}; };
@@ -290,7 +322,11 @@ const useReviews = (prdtId, patnrId) => {
switch (currentFilter.type) { switch (currentFilter.type) {
case 'rating': case 'rating':
if (currentFilter.value === 'all' || currentFilter.value === null) { if (currentFilter.value === 'all' || currentFilter.value === null) {
result = [...allReviews]; // 전체 표시 // 'all' 필터: 별점이 있는 리뷰만 표시 (별점 없는 리뷰 제외)
result = allReviews.filter((review) => {
const rating = review.rvwScr || review.rvwRtng || review.rating;
return rating && rating > 0;
});
} else { } else {
result = allReviews.filter((review) => { result = allReviews.filter((review) => {
const rating = review.rvwScr || review.rvwRtng || review.rating || 0; const rating = review.rvwScr || review.rvwRtng || review.rating || 0;
@@ -498,9 +534,21 @@ const useReviews = (prdtId, patnrId) => {
// 통계 정보 // 통계 정보
const stats = useMemo(() => { const stats = useMemo(() => {
// API와 실제 리뷰 개수 불일치 확인
const apiTotalCount = reviewDetail && reviewDetail.totRvwCnt ? reviewDetail.totRvwCnt : 0;
const actualReviewCount = allReviews.length;
if (apiTotalCount > actualReviewCount && actualReviewCount > 0) {
console.log('[UserReviews]-API Mismatch API 개수와 실제 개수 불일치:', {
apiTotalCount,
actualReviewCount,
difference: apiTotalCount - actualReviewCount,
reason: 'API가 최대 100개만 반환하는 페이징 제한',
});
}
return { return {
totalReviews: totalReviews: actualReviewCount, // 실제로 받은 리뷰 개수 사용 (API 제한 반영)
reviewDetail && reviewDetail.totRvwCnt ? reviewDetail.totRvwCnt : allReviews.length, // 전체 리뷰 개수
filteredCount: filteredReviews.length, // 필터링된 리뷰 개수 filteredCount: filteredReviews.length, // 필터링된 리뷰 개수
displayedCount: displayReviews.length, // 현재 표시 중인 리뷰 개수 displayedCount: displayReviews.length, // 현재 표시 중인 리뷰 개수
averageRating: averageRating:
@@ -509,8 +557,7 @@ const useReviews = (prdtId, patnrId) => {
: reviewDetail && reviewDetail.avgRvwScr : reviewDetail && reviewDetail.avgRvwScr
? reviewDetail.avgRvwScr ? reviewDetail.avgRvwScr
: 0, : 0,
totalRatingCount: totalRatingCount: actualReviewCount, // 실제로 받은 리뷰 개수 사용
reviewDetail && reviewDetail.totRvwCnt ? reviewDetail.totRvwCnt : allReviews.length,
}; };
}, [allReviews.length, filteredReviews.length, displayReviews.length, reviewDetail]); }, [allReviews.length, filteredReviews.length, displayReviews.length, reviewDetail]);

View File

@@ -0,0 +1,29 @@
{
"id": "com.twin.voiceapp",
"version": "1.0",
"vendor": "T-Win",
"type": "web",
"main": "index.html",
"title": "Voice Auto App",
"icon": "icon.png",
"largeIcon": "largeIcon.png",
"handlesRelaunch": true,
"requiredPermissions": [
"time.query",
"device.info",
"applications.query",
"settings.read",
"applications.operation"
],
"inAppVoiceIntent": {
"contentTarget": {
"intent": "$INTENT",
"intentParam": "$INTENT_PARAM",
"languageCode": "$LANG_CODE"
},
"voiceConfig": {
"supportedIntent": ["UseIME", "SearchContent"],
"supportedVoiceLanguage": ["ko-KR", "en-US"]
}
}
}