-
Notifications
You must be signed in to change notification settings - Fork 0
/
chat.js
117 lines (101 loc) · 4.31 KB
/
chat.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Selecciona los elementos del DOM
const messagesDiv = document.getElementById('messages');
const messageInput = document.getElementById('message-input');
const sendButton = document.getElementById('send-button');
const usernameDialog = document.getElementById('db-dialog');
const usernameInput = document.getElementById('db-input');
const confirmUsernameButton = document.getElementById('db-username');
const chatContainer = document.getElementById('chat-container');
let username = '';
// Función para agregar mensajes al chat
function addMessageToChat(message, className) {
const p = document.createElement('p');
p.className = className;
p.textContent = message;
messagesDiv.appendChild(p);
messagesDiv.scrollTop = messagesDiv.scrollHeight; // Scroll al final del chat
}
// Función para mostrar el cuadro de diálogo del nombre de usuario
function showUsernameDialog() {
usernameDialog.style.display = 'flex';
}
// Función para ocultar el cuadro de diálogo y mostrar el chat
function hideUsernameDialog() {
usernameDialog.style.display = 'none';
chatContainer.style.display = 'block';
}
// Evento de clic en el botón "Confirmar" para el nombre de usuario
confirmUsernameButton.addEventListener('click', () => {
const enteredUsername = usernameInput.value.trim();
if (enteredUsername) {
const initdb = enteredUsername; // Guardamos el nombre de usuario
const requestBody = {
Item: initdb
}
fetch('https://back.moresales.club/test_asuna/init_item', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestBody)
}).then((response) => {
if (!response.ok) { // Verifica si la respuesta no fue exitosa (status >= 400)
return response.json().then(err => {
throw new Error(`Error ${response.status}: ${err.detail || 'Error desconocido'}`);
});
}
return response.json();
}) // convertir a json
.then((json) => {
hideUsernameDialog()
localStorage.setItem('db', initdb)
addMessageToChat(`Conexion establesida a la base de datos: ${json.payload}`, 'api-response');
}) //imprimir los datos en la consola
.catch((err) => {
console.log('Solicitud fallida', err)
alert('Error en la conexios revisa que el url este bien')
}); // Capturar errores
}
});
// Evento de clic en el botón "Enviar"
sendButton.addEventListener('click', async () => {
const message = messageInput.value;
if (message.trim() === '') {
return; // Si el mensaje está vacío, no hacemos nada
}
// Agregar el mensaje del usuario al chat
addMessageToChat(`${username}: ${message}`, 'user-message');
// Limpiar el input después de enviar el mensaje
messageInput.value = '';
// Crear el cuerpo de la solicitud
const requestBody = {
Item: localStorage.getItem('db'),
q: message
};
try {
// Enviar el mensaje al endpoint '/inference' usando fetch
const response = await fetch('https://back.moresales.club/test_asuna/inference', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestBody)
});
// Verificar si la respuesta es exitosa
if (response.ok) {
const jsonResponse = await response.json();
const apiResponse = jsonResponse.res; // Suponiendo que el backend devuelve una respuesta en el campo "response"
const sql_query_generated = jsonResponse.sql_query_generated
// Agregar la respuesta de la API al chat
addMessageToChat(`Respuesta: ${JSON.stringify(apiResponse)}`, 'api-response');
//addMessageToChat(`Consulta SQL generada: ${sql_query_generated}`, 'api-response');
} else {
addMessageToChat('Error al conectarse con la API', 'api-response');
}
} catch (error) {
console.error('Error:', error);
addMessageToChat('Error al enviar el mensaje', 'api-response');
}
});
// Mostrar el cuadro de diálogo del nombre de usuario al cargar la página
showUsernameDialog();