From 3ff3b7f0a1b0697a2687db891d75dd0d0f7d3de7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=84=AD=E6=B2=9B=E8=BB=92?= Date: Sun, 5 Oct 2025 04:43:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=A7=8B=20review=20?= =?UTF-8?q?=E7=B5=84=E4=BB=B6=E6=9E=B6=E6=A7=8B=20+=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20API=20=E7=AB=AF=E5=8F=A3=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重構組件命名: Simple* → 更語義化命名 - SimpleFlipCard → FlipMemory - VocabChoiceTest → VocabChoiceQuiz - SimpleProgress → QuizProgress - SimpleResults → QuizResult - SimpleTestHeader → QuizHeader - 重新組織目錄結構: - components/review/simple/ → components/review/quiz/ & ui/ - 分離測驗邏輯組件 (quiz/) 和 UI 組件 (ui/) - 修正 API 配置: - 更新 frontend/lib/config/api.ts: localhost:5008 → localhost:5000 - 配合後端實際運行端口 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- frontend/app/review-simple/page.tsx | 16 ++++++++-------- .../SimpleFlipCard.tsx => quiz/FlipMemory.tsx} | 8 ++++---- .../SimpleResults.tsx => quiz/QuizResult.tsx} | 2 +- .../VocabChoiceQuiz.tsx} | 6 +++--- .../SimpleTestHeader.tsx => ui/QuizHeader.tsx} | 2 +- .../SimpleProgress.tsx => ui/QuizProgress.tsx} | 2 +- frontend/lib/config/api.ts | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) rename frontend/components/review/{simple/SimpleFlipCard.tsx => quiz/FlipMemory.tsx} (95%) rename frontend/components/review/{simple/SimpleResults.tsx => quiz/QuizResult.tsx} (94%) rename frontend/components/review/{simple/VocabChoiceTest.tsx => quiz/VocabChoiceQuiz.tsx} (94%) rename frontend/components/review/{simple/SimpleTestHeader.tsx => ui/QuizHeader.tsx} (81%) rename frontend/components/review/{simple/SimpleProgress.tsx => ui/QuizProgress.tsx} (95%) diff --git a/frontend/app/review-simple/page.tsx b/frontend/app/review-simple/page.tsx index d718bff..27eecc7 100644 --- a/frontend/app/review-simple/page.tsx +++ b/frontend/app/review-simple/page.tsx @@ -2,10 +2,10 @@ import { Navigation } from '@/components/shared/Navigation' import './globals.css' -import { SimpleFlipCard } from '@/components/review/simple/SimpleFlipCard' -import { VocabChoiceTest } from '@/components/review/simple/VocabChoiceTest' -import { SimpleProgress } from '@/components/review/simple/SimpleProgress' -import { SimpleResults } from '@/components/review/simple/SimpleResults' +import { FlipMemory } from '@/components/review/quiz/FlipMemory' +import { VocabChoiceQuiz } from '@/components/review/quiz/VocabChoiceQuiz' +import { QuizProgress } from '@/components/review/ui/QuizProgress' +import { QuizResult } from '@/components/review/quiz/QuizResult' import { SIMPLE_CARDS } from '@/lib/data/reviewSimpleData' import { useReviewSession } from '@/hooks/review/useReviewSession' @@ -32,7 +32,7 @@ export default function SimpleReviewPage() {
-
{/* 使用修改後的 SimpleProgress 組件 */} - {currentTestItem.testType === 'flip-card' && ( - void } -export function SimpleFlipCard({ card, onAnswer, onSkip }: SimpleFlipCardProps) { +export function FlipMemory({ card, onAnswer, onSkip }: SimpleFlipCardProps) { const [isFlipped, setIsFlipped] = useState(false) const [selectedConfidence, setSelectedConfidence] = useState(null) const [cardHeight, setCardHeight] = useState(400) @@ -103,7 +103,7 @@ export function SimpleFlipCard({ card, onAnswer, onSkip }: SimpleFlipCardProps) style={{ backfaceVisibility: 'hidden' }} >
- @@ -137,7 +137,7 @@ export function SimpleFlipCard({ card, onAnswer, onSkip }: SimpleFlipCardProps) }} >
- diff --git a/frontend/components/review/simple/SimpleResults.tsx b/frontend/components/review/quiz/QuizResult.tsx similarity index 94% rename from frontend/components/review/simple/SimpleResults.tsx rename to frontend/components/review/quiz/QuizResult.tsx index 34beb4a..cfa0577 100644 --- a/frontend/components/review/simple/SimpleResults.tsx +++ b/frontend/components/review/quiz/QuizResult.tsx @@ -4,7 +4,7 @@ interface SimpleResultsProps { onRestart: () => void } -export function SimpleResults({ score, totalCards, onRestart }: SimpleResultsProps) { +export function QuizResult({ score, totalCards, onRestart }: SimpleResultsProps) { const accuracy = Math.round((score.correct / score.total) * 100) const getPerformanceMessage = () => { diff --git a/frontend/components/review/simple/VocabChoiceTest.tsx b/frontend/components/review/quiz/VocabChoiceQuiz.tsx similarity index 94% rename from frontend/components/review/simple/VocabChoiceTest.tsx rename to frontend/components/review/quiz/VocabChoiceQuiz.tsx index ab9c014..d99e419 100644 --- a/frontend/components/review/simple/VocabChoiceTest.tsx +++ b/frontend/components/review/quiz/VocabChoiceQuiz.tsx @@ -2,7 +2,7 @@ import { useState, useCallback } from 'react' import { CardState } from '@/lib/data/reviewSimpleData' -import { SimpleTestHeader } from './SimpleTestHeader' +import { QuizHeader } from '../ui/QuizHeader' interface VocabChoiceTestProps { card: CardState @@ -11,7 +11,7 @@ interface VocabChoiceTestProps { onSkip: () => void } -export function VocabChoiceTest({ card, options, onAnswer, onSkip }: VocabChoiceTestProps) { +export function VocabChoiceQuiz({ card, options, onAnswer, onSkip }: VocabChoiceTestProps) { const [selectedAnswer, setSelectedAnswer] = useState(null) const [showResult, setShowResult] = useState(false) @@ -43,7 +43,7 @@ export function VocabChoiceTest({ card, options, onAnswer, onSkip }: VocabChoice return (
- diff --git a/frontend/components/review/simple/SimpleTestHeader.tsx b/frontend/components/review/ui/QuizHeader.tsx similarity index 81% rename from frontend/components/review/simple/SimpleTestHeader.tsx rename to frontend/components/review/ui/QuizHeader.tsx index 5d25c93..66e5232 100644 --- a/frontend/components/review/simple/SimpleTestHeader.tsx +++ b/frontend/components/review/ui/QuizHeader.tsx @@ -5,7 +5,7 @@ interface SimpleTestHeaderProps { cefr: string } -export function SimpleTestHeader({ title, cefr }: SimpleTestHeaderProps) { +export function QuizHeader({ title, cefr }: SimpleTestHeaderProps) { return (

{title}

diff --git a/frontend/components/review/simple/SimpleProgress.tsx b/frontend/components/review/ui/QuizProgress.tsx similarity index 95% rename from frontend/components/review/simple/SimpleProgress.tsx rename to frontend/components/review/ui/QuizProgress.tsx index 0f90ccb..6d444f7 100644 --- a/frontend/components/review/simple/SimpleProgress.tsx +++ b/frontend/components/review/ui/QuizProgress.tsx @@ -8,7 +8,7 @@ interface SimpleProgressProps { testItems?: TestItem[] // 用於顯示測驗項目統計 } -export function SimpleProgress({ currentTestItem, totalTestItems, completedTestItems, score, testItems }: SimpleProgressProps) { +export function QuizProgress({ currentTestItem, totalTestItems, completedTestItems, score, testItems }: SimpleProgressProps) { const progress = (completedTestItems / totalTestItems) * 100 const accuracy = score.total > 0 ? Math.round((score.correct / score.total) * 100) : 0 diff --git a/frontend/lib/config/api.ts b/frontend/lib/config/api.ts index 845be94..7df84e1 100644 --- a/frontend/lib/config/api.ts +++ b/frontend/lib/config/api.ts @@ -5,7 +5,7 @@ // API基礎配置 export const API_CONFIG = { - BASE_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5008', + BASE_URL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5000', ENDPOINTS: { AUTH: '/api/auth', FLASHCARDS: '/api',