From 3817e7bd4bbb7685627b1fcf0a6f3c552cb3f0a7 Mon Sep 17 00:00:00 2001 From: evenegas Date: Tue, 17 Jun 2025 09:20:52 -0600 Subject: [PATCH] =?UTF-8?q?Se=20agreg=C3=B3=20funciones=20de=20carga=20y?= =?UTF-8?q?=20descarga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/carga/page.tsx | 90 +++++++++++++++++++++++---------- src/app/page.tsx | 12 +++-- src/components/cargaArchivo.tsx | 40 ++++++++++----- 3 files changed, 98 insertions(+), 44 deletions(-) diff --git a/src/app/carga/page.tsx b/src/app/carga/page.tsx index 623d3b8..dd275a2 100644 --- a/src/app/carga/page.tsx +++ b/src/app/carga/page.tsx @@ -14,34 +14,68 @@ const fuentes = [ ]; export default function Dashboard() { - // const loading = useAuthRedirect(); + const loading = useAuthRedirect(); - // if (loading) { - // return

; - // } + if (loading) { + return

; + } + const handleDownload = async () => { + const token = localStorage.getItem("token"); + + if (!token) { + alert("Token no encontrado. Inicia sesión."); + return; + } + + try { + const response = await fetch("http://localhost:4000/excel/download", { + method: "GET", + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!response.ok) { + throw new Error("Error al descargar la base de datos"); + } + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + + const a = document.createElement("a"); + a.href = url; + a.download = "usuarios.tsv"; + document.body.appendChild(a); + a.click(); + a.remove(); + window.URL.revokeObjectURL(url); + } catch (error: any) { + alert(`Error al descargar: ${error.message}`); + } + }; return ( -
- - - - -
- +
+

Fuentes

+ }} + > {fuentes.map((f, idx) => (
-

Descarga de Datos

-
diff --git a/src/app/page.tsx b/src/app/page.tsx index 6531dfd..26f0ff7 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -15,12 +15,14 @@ export default function Login() { const handleLogin = async () => { try { - const response = await axios.post('/api/auth/login', { - cuenta: value, + const response = await axios.post('http://localhost:4000/login', { + email: value, password: password, }); - const token = response.data.token; + + + const token = response.data.access_token; localStorage.setItem('token', token); // Redirige al usuario @@ -64,8 +66,8 @@ export default function Login() {

Sistema de --------

setValue(e.target.value)} /> diff --git a/src/components/cargaArchivo.tsx b/src/components/cargaArchivo.tsx index b99ea74..7017571 100644 --- a/src/components/cargaArchivo.tsx +++ b/src/components/cargaArchivo.tsx @@ -12,19 +12,37 @@ const CargaArchivo: React.FC = () => { const handleUpload = async () => { if (!archivo) return; + const token = localStorage.getItem("token"); // 👈 Token JWT guardado en login + + + if (!token) { + alert("No hay token disponible. Inicia sesión."); + return; + } + const formData = new FormData(); - formData.append("archivo", archivo); + formData.append("file", archivo); // 👈 ¡Debe coincidir con FileInterceptor('file') - const res = await fetch("/api/cargar-archivo", { - method: "POST", - body: formData, - }); + try { + const res = await fetch("http://localhost:4000/excel/load", { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, // 👈 Incluye el token en el header + }, + body: formData, + }); - if (res.ok) { - alert("Archivo subido correctamente"); - setArchivo(null); - } else { - alert("Error al subir archivo"); + const data = await res.json(); + + if (res.ok) { + alert("Archivo subido correctamente"); + setArchivo(null); + } else { + console.error(data); + alert(`Error al subir archivo: ${JSON.stringify(data)}`); + } + } catch (err) { + alert(`Error en la solicitud: ${err}`); } }; @@ -41,10 +59,8 @@ const CargaArchivo: React.FC = () => { disabled={!archivo} className="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700" style={{ - backgroundColor: "#2563eb", color: "#fff", - }} > Subir archivo