diff --git a/src/api/admin-generate-question.ts b/src/api/admin-generate-question.ts
new file mode 100644
index 0000000..c7fbe05
--- /dev/null
+++ b/src/api/admin-generate-question.ts
@@ -0,0 +1,32 @@
+import { server_axiosInstance } from '../utils/axios';
+
+interface AdminGenerateQuestionProps {
+ category: string;
+ type: string;
+ questionContent: string;
+ answerContent: string;
+}
+
+export async function AdminGenerateQuestion({
+ category,
+ type,
+ questionContent,
+ answerContent,
+}: AdminGenerateQuestionProps) {
+ const year = new Date().getFullYear();
+ const data = {
+ content: questionContent,
+ questionType: type,
+ questionCategory: category,
+ answer: {
+ content: answerContent,
+ renewalYear: year,
+ },
+ };
+ try {
+ const response = await server_axiosInstance.post('/api/questions/new', JSON.stringify(data));
+ return response.data;
+ } catch (error: any) {
+ throw new Error('created failed');
+ }
+}
diff --git a/src/api/admin-retrieve-file.ts b/src/api/admin-retrieve-file.ts
index a1b377c..c5f5c50 100644
--- a/src/api/admin-retrieve-file.ts
+++ b/src/api/admin-retrieve-file.ts
@@ -7,7 +7,7 @@ interface AdminRetrieveFileProps {
export async function adminRetrieveFile({ type, category }: AdminRetrieveFileProps) {
try {
- const response = await llm_axiosInstance.get('/retrieve_documents_by_type_and_category', {
+ const response = await llm_axiosInstance.get('/retrieve_documents', {
params: {
type,
category,
diff --git a/src/routes/admin-routes.tsx b/src/routes/admin-routes.tsx
index e1cfca7..5d69200 100644
--- a/src/routes/admin-routes.tsx
+++ b/src/routes/admin-routes.tsx
@@ -6,6 +6,7 @@ import Login from '../ui/pages/admin/login';
import AdminLayout from '../ui/components/admin/Layout/admin-layout';
import { getCookie } from '../utils/cookies';
import QuestionCheck from '../ui/pages/admin/question-check';
+import GenerateQuestion from '../ui/pages/admin/generate-question';
const AdminRoutes: React.FC = () => {
const token = getCookie('accessToken');
return (
@@ -14,6 +15,7 @@ const AdminRoutes: React.FC = () => {
} authenticated={token} />}>
} />
} />
+ } />
);
diff --git a/src/ui/components/admin/Layout/admin-layout.tsx b/src/ui/components/admin/Layout/admin-layout.tsx
index 277d590..3280c51 100644
--- a/src/ui/components/admin/Layout/admin-layout.tsx
+++ b/src/ui/components/admin/Layout/admin-layout.tsx
@@ -24,8 +24,9 @@ const AdminLayout: React.FC = () => {
const breadcrumpItem1 = pathname.split('/')[1];
const breadcrumpItem2 = pathname.split('/')[2];
+ const breadcrumpItem3 = pathname.split('/')[3];
- const breadcrumpItems = [{ title: breadcrumpItem1 }, { title: breadcrumpItem2 }];
+ const breadcrumpItems = [{ title: breadcrumpItem1 }, { title: breadcrumpItem2 }, { title: breadcrumpItem3 }];
return (
diff --git a/src/ui/components/admin/slide-menu/slide-menu.tsx b/src/ui/components/admin/slide-menu/slide-menu.tsx
index 88f36f7..4822da4 100644
--- a/src/ui/components/admin/slide-menu/slide-menu.tsx
+++ b/src/ui/components/admin/slide-menu/slide-menu.tsx
@@ -10,11 +10,10 @@ export default function SlideMenu(props: MenuProps) {
return [
{ key: '/admin/question/list', label: '질문 목록' },
{ type: 'divider' },
- { key: '/admin/setting/preset', label: '질문 프리셋 변경' },
- { type: 'divider' },
- { key: '/admin/setting/category', label: '카테고리 변경' },
{ type: 'divider' },
{ key: '/admin/setting/file', label: '파일 확인' },
+ { type: 'divider' },
+ { key: '/admin/generate/question', label: '질문답변 생성' },
];
}, []);
diff --git a/src/ui/pages/admin/file-list.tsx b/src/ui/pages/admin/file-list.tsx
index f725393..127cae5 100644
--- a/src/ui/pages/admin/file-list.tsx
+++ b/src/ui/pages/admin/file-list.tsx
@@ -39,6 +39,7 @@ const FileList: React.FC = () => {
console.error('Upload failed', error);
}
setUploading(false);
+ setFileList([]);
};
useEffect(() => {
@@ -46,17 +47,22 @@ const FileList: React.FC = () => {
setLoading(true);
try {
const response = await adminRetrieveFile({ type, category });
- const formattedData = response.documents.reduce((acc: DataListType[], item: any) => {
- const exists = acc.find((data) => data.title === item.title);
- if (!exists) {
- acc.push({
- title: item.title,
- createdAt: item.created_at,
- });
- }
- return acc;
- }, []);
- console.log(dataList);
+ const formattedData: DataListType[] = [];
+
+ Object.keys(response.documents).forEach((key) => {
+ const documentsArray = response.documents[key];
+
+ documentsArray.forEach((item: any) => {
+ const exists = formattedData.find((data) => data.title === item.title);
+ if (!exists) {
+ formattedData.push({
+ title: item.title,
+ createdAt: item.created_at,
+ });
+ }
+ });
+ });
+
setDataList(formattedData);
} catch (error) {
console.error('다운로드 에러', error);
diff --git a/src/ui/pages/admin/generate-question.tsx b/src/ui/pages/admin/generate-question.tsx
new file mode 100644
index 0000000..fcced37
--- /dev/null
+++ b/src/ui/pages/admin/generate-question.tsx
@@ -0,0 +1,72 @@
+import React, { useState } from 'react';
+import { Button, Divider, Input, Select } from 'antd';
+import TextArea from 'antd/es/input/TextArea';
+import { AdminGenerateQuestion } from '../../../api/admin-generate-question';
+
+const GenerateQuestion = () => {
+ const [type, setType] = useState('SUSI');
+ const [category, setCategory] = useState('ADMISSION_GUIDELINE');
+ const [question, setQuestion] = useState('');
+ const [answer, setAnswer] = useState('');
+ const handleTypeChange = (value: string) => {
+ setType(value);
+ };
+
+ const handleCategoryChange = (value: string) => {
+ setCategory(value);
+ };
+
+ const handleQuestionInputChange = (e: React.ChangeEvent) => {
+ setQuestion(e.target.value);
+ };
+
+ const handleAnswerInputChange = (e: React.ChangeEvent) => {
+ setAnswer(e.target.value);
+ };
+ return (
+
+
챗봇 질문-답변 생성하기
+
+ 전형선택
+
+
+
+ 카테고리 선택
+
+
+
질문 내용
+
+
답변 내용
+
볼드체: **볼드단어**
+
+
+
+ );
+};
+
+export default GenerateQuestion;
diff --git a/src/ui/pages/admin/login.tsx b/src/ui/pages/admin/login.tsx
index dd6deec..bf43b9e 100644
--- a/src/ui/pages/admin/login.tsx
+++ b/src/ui/pages/admin/login.tsx
@@ -18,11 +18,12 @@ export default function Login() {
setIsLoading(true);
try {
await AdminLogin(email, password);
+ setLoginSuccess(true);
} catch (err: any) {
setError(err.message);
+ setLoginSuccess(false);
} finally {
setIsLoading(false);
- setLoginSuccess(true);
}
};