diff --git a/src/app/chatbot/components/ChatBot.tsx b/src/app/chatbot/components/ChatBot.tsx
index 4ec55bf..87c3a7c 100644
--- a/src/app/chatbot/components/ChatBot.tsx
+++ b/src/app/chatbot/components/ChatBot.tsx
@@ -16,6 +16,8 @@ export default function ChatBot() {
setInput,
handleSubmit,
handleRecommendationClick,
+ handlePopularTerms,
+ handleTodaysTerm,
} = useChatBot();
return (
@@ -53,19 +55,14 @@ export default function ChatBot() {
}
label="인기 용어"
- onClick={() =>
- handleSubmit(
- undefined,
- "React, Next.js, Docker 이 세 가지 용어를 각각 설명해줘."
- )
- }
+ onClick={handlePopularTerms}
/>
}
label="오늘의 용어"
- onClick={() => handleSubmit(undefined, "TypeScript")}
+ onClick={handleTodaysTerm}
/>
{
+ const terms = await getPopularTerms(category, 3);
+ if (terms.length === 0) {
+ return "React, Next.js, Docker 이 세 가지 용어를 각각 설명해줘.";
+ }
+ return `${terms.join(", ")} 이 세 가지 용어를 각각 설명해줘.`;
+}
+
+/**
+ * 오늘의 용어 가져오기
+ */
+export async function getTodaysTermQuery(): Promise {
+ const todayTerm = await getTodaysTerm();
+ if (!todayTerm) {
+ return "TypeScript";
+ }
+ return todayTerm.termKo;
+}
diff --git a/src/hooks/useChatBot.ts b/src/hooks/useChatBot.ts
index 90aa2b2..63cad34 100644
--- a/src/hooks/useChatBot.ts
+++ b/src/hooks/useChatBot.ts
@@ -2,6 +2,11 @@
import { useState, useRef, useEffect, useCallback } from "react";
import { getChatResponse } from "@/app/chatbot/utils/actions";
+import {
+ getPopularTermsQuery,
+ getTodaysTermQuery,
+} from "@/app/chatbot/utils/quick-actions";
+import { useUserData } from "@/contexts/auth";
interface Message {
role: "user" | "bot";
@@ -17,6 +22,8 @@ interface UseChatBotReturn {
setInput: (value: string) => void;
handleSubmit: (e?: React.FormEvent, customInput?: string) => Promise;
handleRecommendationClick: (question: string) => void;
+ handlePopularTerms: () => Promise;
+ handleTodaysTerm: () => Promise;
}
const INITIAL_MESSAGE: Message = {
@@ -26,6 +33,7 @@ const INITIAL_MESSAGE: Message = {
};
export function useChatBot(): UseChatBotReturn {
+ const { userData } = useUserData();
const [messages, setMessages] = useState([INITIAL_MESSAGE]);
const [input, setInput] = useState("");
const [isLoading, setIsLoading] = useState(false);
@@ -68,6 +76,17 @@ export function useChatBot(): UseChatBotReturn {
[handleSubmit]
);
+ const handlePopularTerms = useCallback(async () => {
+ const category = userData?.selectedCategory || "all";
+ const query = await getPopularTermsQuery(category);
+ await handleSubmit(undefined, query);
+ }, [userData, handleSubmit]);
+
+ const handleTodaysTerm = useCallback(async () => {
+ const query = await getTodaysTermQuery();
+ await handleSubmit(undefined, query);
+ }, [handleSubmit]);
+
return {
messages,
input,
@@ -76,5 +95,7 @@ export function useChatBot(): UseChatBotReturn {
setInput,
handleSubmit,
handleRecommendationClick,
+ handlePopularTerms,
+ handleTodaysTerm,
};
}
diff --git a/src/lib/recommendations.ts b/src/lib/recommendations.ts
index 391c6ec..fc6965b 100644
--- a/src/lib/recommendations.ts
+++ b/src/lib/recommendations.ts
@@ -88,3 +88,19 @@ export async function getRecommendedTerms(
return [];
}
}
+
+/**
+ * 인기 용어 가져오기 (카테고리 기반, 새로고침마다 랜덤)
+ */
+export async function getPopularTerms(
+ category: CategoryType,
+ count: number = 3
+): Promise {
+ try {
+ const terms = await getRecommendedTerms(category, count);
+ return terms.map((t) => t.term);
+ } catch (error) {
+ console.error("인기 용어 로드 실패:", error);
+ return [];
+ }
+}
diff --git a/src/lib/terms.server.ts b/src/lib/terms.server.ts
index b16386a..769821f 100644
--- a/src/lib/terms.server.ts
+++ b/src/lib/terms.server.ts
@@ -46,3 +46,11 @@ export function getTodaysTermServer(): TermIndexItem | null {
return index[todayIndex];
}
+
+/**
+ * 서버에서 오늘의 용어 한국어 이름만 가져오기
+ */
+export function getTodaysTermNameServer(): string | null {
+ const term = getTodaysTermServer();
+ return term ? term.termKo : null;
+}