const express = require('express'); const Database = require('better-sqlite3'); const path = require('path'); const app = express(); const PORT = 3000; const DATA_DIR = '/app/data'; app.use(express.json()); const dbTrabajadores = new Database(path.join(DATA_DIR, 'trabajadores.db')); const dbDatos = new Database(path.join(DATA_DIR, 'datos.db')); const dbHistorial = new Database(path.join(DATA_DIR, 'historial.db')); // ==================== TRABAJADORES ==================== app.get('/api/trabajadores', (req, res) => { try { const rows = dbTrabajadores.prepare('SELECT * FROM trabajadores ORDER BY nombre').all(); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); app.post('/api/trabajadores', (req, res) => { try { const { id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo } = req.body; dbTrabajadores.prepare( 'INSERT INTO trabajadores (id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' ).run(id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo); res.json({ message: 'Trabajador creado' }); } catch (err) { res.status(500).json({ error: err.message }); } }); app.put('/api/trabajadores/:id', (req, res) => { try { const idOriginal = req.params.id; const { id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo } = req.body; dbTrabajadores.prepare( 'UPDATE trabajadores SET id = ?, nombre = ?, apellidos = ?, puesto = ?, salario_mensual = ?, fecha_ingreso = ?, seguridad_social = ?, activo = ? WHERE id = ?' ).run(id, nombre, apellidos, puesto, salario_mensual, fecha_ingreso, seguridad_social, activo, idOriginal); res.json({ message: 'Trabajador actualizado' }); } catch (err) { res.status(500).json({ error: err.message }); } }); app.delete('/api/trabajadores/:id', (req, res) => { try { dbTrabajadores.prepare('DELETE FROM trabajadores WHERE id = ?').run(req.params.id); res.json({ message: 'Trabajador eliminado' }); } catch (err) { res.status(500).json({ error: err.message }); } }); // ==================== CONFIGURACIONES ==================== app.get('/api/configuracion', (req, res) => { try { const row = dbDatos.prepare('SELECT * FROM parametros_nomina ORDER BY id DESC LIMIT 1').get(); res.json(row || {}); } catch (err) { res.status(500).json({ error: err.message }); } }); app.post('/api/configuracion', (req, res) => { try { const { nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna } = req.body; const count = dbDatos.prepare('SELECT COUNT(*) as total FROM parametros_nomina').get().total; if (count === 0) { dbDatos.prepare( 'INSERT INTO parametros_nomina (nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' ).run(nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna); } else { dbDatos.prepare( 'UPDATE parametros_nomina SET nombre_empresa = ?, salario_minimo = ?, auxilio_transporte = ?, horas_semanales = ?, horas_mensuales = ?, dia_inicio_mes = ?, dia_fin_mes = ?, tiempo_almuerzo = ?, valor_hora_ordinaria = ?, valor_hora_extra = ?, valor_hora_extra_nocturna = ?' ).run(nombre_empresa, salario_minimo, auxilio_transporte, horas_semanales, horas_mensuales, dia_inicio_mes, dia_fin_mes, tiempo_almuerzo, valor_hora_ordinaria, valor_hora_extra, valor_hora_extra_nocturna); } res.json({ message: 'Configuración guardada' }); } catch (err) { res.status(500).json({ error: err.message }); } }); // ==================== HISTORIAL ==================== app.get('/api/historial', (req, res) => { try { const rows = dbHistorial.prepare('SELECT * FROM registros_historial ORDER BY fecha DESC').all(); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); app.post('/api/historial', (req, res) => { try { const { fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo } = req.body; dbHistorial.prepare( 'INSERT INTO registros_historial (fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo) VALUES (?, ?, ?, ?, ?)' ).run(fecha, trabajador, inicio_dia, fin_dia, tiempo_almuerzo); res.json({ message: 'Registro guardado' }); } catch (err) { res.status(500).json({ error: err.message }); } }); app.listen(PORT, () => { console.log(`Backend corriendo en http://localhost:${PORT}`); });