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 ( +
+ 챗봇 질문-답변 생성하기 +
+ 전형선택 + +
+ 질문 내용 + + 답변 내용 +
볼드체: **볼드단어**
+