Просмотр исходного кода

Wave 2: profile stats (received-likes, comments) + cash terminology

- UserProfileStats: add 받은 좋아요 + 투자의견 댓글 (data already in DTO)

- Cash terms: 포인트->캐시 (header charge, nav, charge-logs, cart/store notes; drop stale donation sentence); CLAUDE.md 용어 규칙 -> 캐시/코인

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
KIM-JINO5 3 недель назад
Родитель
Сommit
103b96f40f

+ 4 - 3
CLAUDE.md

@@ -132,10 +132,11 @@ ThemeProvider → SignalRProvider → AuthProvider → MemberProvider → Config
 - `MemberProvider`: 현재 사용자 정보
 - `ConfigProvider`: `initialConfig` prop으로 서버에서 설정 전달 (React.cache)
 
-## 용어 규칙
+## 용어 규칙 (개미투자)
 
-- **POINT (포인트)**: 후원 가능한 금액 (PG 충전 → PgCharged 잔액)
-- **머니 (Money)**: 후원 받은 금액 (Donation 잔액 → 출금 가능)
+- **캐시 (Cash)**: 유상 충전 재화 — 토스페이먼츠 PG 충전 (PgCharged + Deposit 잔액). 상점 결제에 사용
+- **코인 (Coin)**: 무상 활동 적립 재화 — 출석·글·댓글·응원수신·가입축하·모의투자 보상 (Reward + Airdrop 잔액). 출금 불가, 상점/모의투자 소비 전용 (구 명칭 "포인트")
+- 후원(Donation)·머니 개념은 개미투자 피벗(Phase B)에서 제거됨
 
 ## 레이아웃 구조
 

+ 1 - 1
app/(main)/(account)/charge-logs/page.tsx

@@ -151,7 +151,7 @@ export default function ChargeLogs()
 							<li>주문번호</li>
 							<li>결제 수단</li>
 							<li>결제 금액</li>
-							<li>포인트</li>
+							<li>캐시</li>
 							<li>상태</li>
 						</ul>
 					) : (

+ 1 - 1
app/(main)/(account)/navTabs.tsx

@@ -34,7 +34,7 @@ export default function NavTabs()
 					{ href: "/profile", label: "내 정보" },
 					{ href: "/inventory", label: "보관함" },
 					{ href: "/orders", label: "주문 목록" },
-					{ href: "/charge-logs", label: "포인트 내역" },
+					{ href: "/charge-logs", label: "캐시 내역" },
 					{ href: "/my-posts", label: "작성 게시글" },
 					{ href: "/my-comments", label: "작성 댓글" },
 					{ href: "/exp-logs", label: "경험치 내역" },

+ 1 - 1
app/(main)/cart/page.tsx

@@ -260,7 +260,7 @@ export default function CartPage()
 							/>
 
 							<p className='text-xs text-neutral-500 mt-2'>
-								* 포인트(예치금) 잔액에서 차감됩니다. 후원 채널 선택 시 채널주에게 일정 비율이 보상으로 지급됩니다.
+								* 결제 시 캐시·코인 잔액에서 차감됩니다.
 							</p>
 						</div>
 					</div>

+ 1 - 1
app/(main)/store/[id]/page.tsx

@@ -434,7 +434,7 @@ export default function StoreDetailPage({ params }: { params: Promise<{ id: stri
 					</div>
 
 					<p className='text-xs text-neutral-500'>
-						* 포인트(예치금) 잔액에서 차감됩니다. 후원 채널 선택 시 채널주에게 일정 비율이 보상으로 지급됩니다.
+						* 결제 시 캐시·코인 잔액에서 차감됩니다.
 					</p>
 				</div>
 			</div>

+ 17 - 1
app/(main)/user/[sid]/_component/UserProfileStats.tsx

@@ -1,4 +1,4 @@
-import { CalendarCheck, Flame } from 'lucide-react';
+import { CalendarCheck, Flame, ThumbsUp, MessageSquare } from 'lucide-react';
 import { UserProfileDto } from '@/types/account/profile';
 
 type Props = {
@@ -8,6 +8,22 @@ type Props = {
 export default function UserProfileStats({ profile }: Props) {
 	return (
 		<section className="user-profile__stats" aria-label="회원 활동 통계">
+			<div className="user-profile__stat">
+				<ThumbsUp size={20} className="user-profile__stat-icon user-profile__stat-icon--like" strokeWidth={1.75} />
+				<div className="user-profile__stat-body">
+					<span className="user-profile__stat-label">받은 좋아요</span>
+					<span className="user-profile__stat-value">{profile.likeReceivedCount.toLocaleString()}</span>
+				</div>
+			</div>
+
+			<div className="user-profile__stat">
+				<MessageSquare size={20} className="user-profile__stat-icon user-profile__stat-icon--comment" strokeWidth={1.75} />
+				<div className="user-profile__stat-body">
+					<span className="user-profile__stat-label">투자의견 댓글</span>
+					<span className="user-profile__stat-value">{profile.commentCount.toLocaleString()}</span>
+				</div>
+			</div>
+
 			<div className="user-profile__stat">
 				<CalendarCheck size={20} className="user-profile__stat-icon user-profile__stat-icon--attendance" strokeWidth={1.75} />
 				<div className="user-profile__stat-body">

+ 1 - 1
app/component/Header.tsx

@@ -102,7 +102,7 @@ export default function Header({ sidebarOpen, onToggle }: Props)
 					</Link>
 					{isAuthenticated && (
 						<>
-							<button type="button" className={Styles.chargeBtn} onClick={handlePopupCharge} title="포인트 충전">
+							<button type="button" className={Styles.chargeBtn} onClick={handlePopupCharge} title="캐시 충전">
 								<PointChargeIcon width={24} height={24} />
 							</button>
 							<NotificationBell />