jeongsoo's picture
init
6575706
/**
* RAG ๊ฒ€์ƒ‰ ์ฑ—๋ด‡ ๋ฌธ์„œ ๊ด€๋ฆฌ JavaScript
*/
// DOM ์š”์†Œ ๋ฏธ๋ฆฌ ์„ ์–ธ
let uploadForm, documentFile, fileName, uploadButton, uploadStatus;
let refreshDocsButton, docsList, docsLoading, noDocsMessage;
/**
* ๋ฌธ์„œ ๊ด€๋ฆฌ DOM ์š”์†Œ ์ดˆ๊ธฐํ™”
*/
function initDocsElements() {
console.log('๋ฌธ์„œ ๊ด€๋ฆฌ DOM ์š”์†Œ ์ดˆ๊ธฐํ™” ์ค‘...');
uploadForm = document.getElementById('uploadForm');
documentFile = document.getElementById('documentFile');
fileName = document.getElementById('fileName');
uploadButton = document.getElementById('uploadButton');
uploadStatus = document.getElementById('uploadStatus');
refreshDocsButton = document.getElementById('refreshDocsButton');
docsList = document.getElementById('docsList');
docsLoading = document.getElementById('docsLoading');
noDocsMessage = document.getElementById('noDocsMessage');
console.log('๋ฌธ์„œ ๊ด€๋ฆฌ DOM ์š”์†Œ ์ดˆ๊ธฐํ™” ์™„๋ฃŒ');
// ๋ฌธ์„œ ๊ด€๋ฆฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ดˆ๊ธฐํ™”
initDocsEventListeners();
}
/**
* ๋ฌธ์„œ ๊ด€๋ฆฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ดˆ๊ธฐํ™”
*/
function initDocsEventListeners() {
console.log('๋ฌธ์„œ ๊ด€๋ฆฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ดˆ๊ธฐํ™” ์ค‘...');
// ๋ฌธ์„œ ์—…๋กœ๋“œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ
documentFile.addEventListener('change', (event) => {
if (event.target.files.length > 0) {
fileName.textContent = event.target.files[0].name;
console.log(`ํŒŒ์ผ ์„ ํƒ๋จ: ${event.target.files[0].name}`);
} else {
fileName.textContent = '์„ ํƒ๋œ ํŒŒ์ผ ์—†์Œ';
console.log('ํŒŒ์ผ ์„ ํƒ ์ทจ์†Œ๋จ');
}
});
uploadForm.addEventListener('submit', (event) => {
event.preventDefault();
console.log('์—…๋กœ๋“œ ํผ ์ œ์ถœ๋จ');
uploadDocument();
});
// ๋ฌธ์„œ ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ
refreshDocsButton.addEventListener('click', () => {
console.log('๋ฌธ์„œ ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ ์š”์ฒญ');
loadDocuments();
});
console.log('๋ฌธ์„œ ๊ด€๋ฆฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ดˆ๊ธฐํ™” ์™„๋ฃŒ');
}
/**
* ๋ฌธ์„œ ์—…๋กœ๋“œ ํ•จ์ˆ˜
*/
async function uploadDocument() {
if (documentFile.files.length === 0) {
console.log('์—…๋กœ๋“œํ•  ํŒŒ์ผ์ด ์„ ํƒ๋˜์ง€ ์•Š์Œ');
alert('ํŒŒ์ผ์„ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.');
return;
}
console.log(`ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ์ž‘: ${documentFile.files[0].name}`);
// UI ์—…๋ฐ์ดํŠธ
uploadStatus.classList.remove('hidden');
uploadStatus.className = 'upload-status';
uploadStatus.innerHTML = '<div class="spinner"></div><p>์—…๋กœ๋“œ ์ค‘...</p>';
uploadButton.disabled = true;
try {
const formData = new FormData();
formData.append('document', documentFile.files[0]);
console.log('๋ฌธ์„œ ์—…๋กœ๋“œ API ์š”์ฒญ ์ „์†ก');
// API ์š”์ฒญ
const response = await fetch('/api/upload', {
method: 'POST',
body: formData
});
const data = await response.json();
console.log('๋ฌธ์„œ ์—…๋กœ๋“œ API ์‘๋‹ต ์ˆ˜์‹ ');
// ์‘๋‹ต ์ฒ˜๋ฆฌ
if (data.error) {
console.error('์—…๋กœ๋“œ ์˜ค๋ฅ˜:', data.error);
uploadStatus.className = 'upload-status error';
uploadStatus.textContent = `์˜ค๋ฅ˜: ${data.error}`;
} else if (data.warning) {
console.warn('์—…๋กœ๋“œ ๊ฒฝ๊ณ :', data.message);
uploadStatus.className = 'upload-status warning';
uploadStatus.textContent = data.message;
} else {
console.log('์—…๋กœ๋“œ ์„ฑ๊ณต:', data.message);
uploadStatus.className = 'upload-status success';
uploadStatus.textContent = data.message;
// ๋ฌธ์„œ ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ
loadDocuments();
// ์ž…๋ ฅ ํ•„๋“œ ์ดˆ๊ธฐํ™”
documentFile.value = '';
fileName.textContent = '์„ ํƒ๋œ ํŒŒ์ผ ์—†์Œ';
}
} catch (error) {
console.error('์—…๋กœ๋“œ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜:', error);
uploadStatus.className = 'upload-status error';
uploadStatus.textContent = '์—…๋กœ๋“œ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.';
} finally {
uploadButton.disabled = false;
}
}
/**
* ๋ฌธ์„œ ๋ชฉ๋ก ๋กœ๋“œ ํ•จ์ˆ˜
*/
async function loadDocuments() {
console.log('๋ฌธ์„œ ๋ชฉ๋ก ๋กœ๋“œ ์‹œ์ž‘');
// UI ์—…๋ฐ์ดํŠธ
docsList.querySelector('tbody').innerHTML = '';
docsLoading.classList.remove('hidden');
noDocsMessage.classList.add('hidden');
try {
console.log('๋ฌธ์„œ ๋ชฉ๋ก API ์š”์ฒญ ์ „์†ก');
// API ์š”์ฒญ
const response = await fetch('/api/documents');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log(`๋ฌธ์„œ ๋ชฉ๋ก API ์‘๋‹ต ์ˆ˜์‹ : ${data.documents ? data.documents.length : 0}๊ฐœ ๋ฌธ์„œ`);
// ์‘๋‹ต ์ฒ˜๋ฆฌ
docsLoading.classList.add('hidden');
if (!data.documents || data.documents.length === 0) {
console.log('๋กœ๋“œ๋œ ๋ฌธ์„œ๊ฐ€ ์—†์Œ');
noDocsMessage.classList.remove('hidden');
return;
}
// ๋ฌธ์„œ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ
const tbody = docsList.querySelector('tbody');
data.documents.forEach(doc => {
console.log(`๋ฌธ์„œ ํ‘œ์‹œ: ${doc.filename || doc.source}`);
const row = document.createElement('tr');
const fileNameCell = document.createElement('td');
fileNameCell.textContent = doc.filename || doc.source;
row.appendChild(fileNameCell);
const chunksCell = document.createElement('td');
chunksCell.textContent = doc.chunks;
row.appendChild(chunksCell);
const typeCell = document.createElement('td');
typeCell.textContent = doc.filetype || '-';
row.appendChild(typeCell);
tbody.appendChild(row);
});
console.log('๋ฌธ์„œ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ');
} catch (error) {
console.error('๋ฌธ์„œ ๋ชฉ๋ก ๋กœ๋“œ ์˜ค๋ฅ˜:', error);
docsLoading.classList.add('hidden');
noDocsMessage.classList.remove('hidden');
noDocsMessage.querySelector('p').textContent = '๋ฌธ์„œ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.';
}
}
// ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”
document.addEventListener('DOMContentLoaded', function() {
console.log('๋ฌธ์„œ ๊ด€๋ฆฌ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”');
// ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ดˆ๊ธฐํ™” (DOM ์š”์†Œ๊ฐ€ ์ค€๋น„๋œ ํ›„)
setTimeout(() => {
initDocsElements();
}, 100);
});