Skip to content

Commit ab3f53e

Browse files
authored
Merge pull request #72 from Team-StackUp/feature/feedback-transcript
feat(feedback): 피드백 화면에 질문/답변 원문(transcript) 표시
2 parents 3f43979 + 777fad5 commit ab3f53e

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

frontend/src/features/interview/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export { LiveInterview } from './ui/live/LiveInterview'
2+
export { InterviewTranscript } from './ui/InterviewTranscript'
23
export { InterviewSetupForm } from './ui/setup/InterviewSetupForm'
34
export type { DocOption } from './ui/setup/ContextDocumentPicker'
45
export { useCreateSession } from './model/useCreateSession'
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { isQuestion } from '@/domain/session'
2+
import { Spinner } from '@/shared/ui/Spinner'
3+
import { useSessionMessages } from '../model/useSessionMessages'
4+
import { QuestionBubble } from './live/QuestionBubble'
5+
import { AnswerBubble } from './live/AnswerBubble'
6+
7+
// 종료된 세션의 질문/답변 원문(읽기 전용). 라이브 버블을 재사용해
8+
// 음성 질문 재생(TTS)·음성 답변 재생도 그대로 노출한다.
9+
export function InterviewTranscript({ sessionId }: { sessionId: number }) {
10+
const { data, isLoading } = useSessionMessages(sessionId)
11+
12+
if (isLoading) {
13+
return (
14+
<div className="flex justify-center py-8">
15+
<Spinner />
16+
</div>
17+
)
18+
}
19+
20+
const items = [...(data ?? [])].sort(
21+
(a, b) => (a.sequenceNumber ?? 0) - (b.sequenceNumber ?? 0),
22+
)
23+
if (items.length === 0) return null
24+
25+
return (
26+
<section className="flex flex-col gap-4">
27+
<h2 className="text-h6 text-fg">질문 &amp; 답변</h2>
28+
<div className="flex flex-col gap-3">
29+
{items.map((m) =>
30+
isQuestion(m) ? (
31+
<QuestionBubble key={m.id} message={m} />
32+
) : (
33+
<AnswerBubble key={m.id} message={m} />
34+
),
35+
)}
36+
</div>
37+
</section>
38+
)
39+
}

frontend/src/pages/SessionFeedback/ui/SessionFeedbackPage.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { SiteNav } from '@/widgets/site-nav'
33
import { SiteFooter } from '@/widgets/site-footer'
44
import { Button } from '@/shared/ui/Button'
55
import { FeedbackReport, useFeedback } from '@/features/feedback'
6+
import { InterviewTranscript } from '@/features/interview'
67

78
export default function SessionFeedbackPage() {
89
const { id } = useParams<{ id: string }>()
@@ -38,7 +39,12 @@ export default function SessionFeedbackPage() {
3839
</div>
3940
)}
4041

41-
{data && <FeedbackReport feedback={data} shareable />}
42+
{data && (
43+
<>
44+
<FeedbackReport feedback={data} shareable />
45+
<InterviewTranscript sessionId={sessionId} />
46+
</>
47+
)}
4248
</main>
4349
<SiteFooter />
4450
</div>

0 commit comments

Comments
 (0)