mirror of
https://github.com/marcogll/ap_pos.git
synced 2026-01-14 04:54:24 +00:00
feat: Implement persistence and initial project setup
This commit is contained in:
158
ap-pos/server.js
Normal file
158
ap-pos/server.js
Normal file
@@ -0,0 +1,158 @@
|
||||
|
||||
const express = require('express');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const cors = require('cors');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const port = 3000;
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json());
|
||||
|
||||
// Servir archivos estáticos (CSS, JS, imágenes)
|
||||
app.use(express.static(__dirname));
|
||||
|
||||
// Ruta principal para servir el index.html
|
||||
app.get('/', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'index.html'));
|
||||
});
|
||||
|
||||
// Initialize SQLite database
|
||||
const db = new sqlite3.Database('./ap-pos.db', (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
console.log('Connected to the ap-pos.db database.');
|
||||
});
|
||||
|
||||
// Create tables if they don't exist
|
||||
db.serialize(() => {
|
||||
db.run(`CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT
|
||||
)`);
|
||||
|
||||
db.run(`CREATE TABLE IF NOT EXISTS clients (
|
||||
id TEXT PRIMARY KEY,
|
||||
nombre TEXT,
|
||||
telefono TEXT,
|
||||
cumpleaños TEXT,
|
||||
consentimiento INTEGER
|
||||
)`);
|
||||
|
||||
db.run(`CREATE TABLE IF NOT EXISTS movements (
|
||||
id TEXT PRIMARY KEY,
|
||||
folio TEXT,
|
||||
fechaISO TEXT,
|
||||
clienteId TEXT,
|
||||
tipo TEXT,
|
||||
monto REAL,
|
||||
metodo TEXT,
|
||||
concepto TEXT,
|
||||
staff TEXT,
|
||||
notas TEXT,
|
||||
FOREIGN KEY (clienteId) REFERENCES clients (id)
|
||||
)`);
|
||||
});
|
||||
|
||||
// API routes will go here
|
||||
|
||||
// --- Settings ---
|
||||
app.get('/api/settings', (req, res) => {
|
||||
db.get("SELECT value FROM settings WHERE key = 'settings'", (err, row) => {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json(row ? JSON.parse(row.value) : {});
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/api/settings', (req, res) => {
|
||||
const { settings } = req.body;
|
||||
const value = JSON.stringify(settings);
|
||||
db.run(`INSERT OR REPLACE INTO settings (key, value) VALUES ('settings', ?)`, [value], function(err) {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json({ message: 'Settings saved' });
|
||||
});
|
||||
});
|
||||
|
||||
// --- Clients ---
|
||||
app.get('/api/clients', (req, res) => {
|
||||
db.all("SELECT * FROM clients", [], (err, rows) => {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json(rows);
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/api/clients', (req, res) => {
|
||||
const { client } = req.body;
|
||||
const { id, nombre, telefono, cumpleaños, consentimiento } = client;
|
||||
db.run(`INSERT OR REPLACE INTO clients (id, nombre, telefono, cumpleaños, consentimiento) VALUES (?, ?, ?, ?, ?)`,
|
||||
[id, nombre, telefono, cumpleaños, consentimiento], function(err) {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json({ id });
|
||||
});
|
||||
});
|
||||
|
||||
app.delete('/api/clients/:id', (req, res) => {
|
||||
const { id } = req.params;
|
||||
db.run(`DELETE FROM clients WHERE id = ?`, id, function(err) {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json({ message: 'Client deleted' });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// --- Movements ---
|
||||
app.get('/api/movements', (req, res) => {
|
||||
db.all("SELECT * FROM movements ORDER BY fechaISO DESC", [], (err, rows) => {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json(rows);
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/api/movements', (req, res) => {
|
||||
const { movement } = req.body;
|
||||
const { id, folio, fechaISO, clienteId, tipo, monto, metodo, concepto, staff, notas } = movement;
|
||||
db.run(`INSERT INTO movements (id, folio, fechaISO, clienteId, tipo, monto, metodo, concepto, staff, notas)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
[id, folio, fechaISO, clienteId, tipo, monto, metodo, concepto, staff, notas], function(err) {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json({ id });
|
||||
});
|
||||
});
|
||||
|
||||
app.delete('/api/movements/:id', (req, res) => {
|
||||
const { id } = req.params;
|
||||
db.run(`DELETE FROM movements WHERE id = ?`, id, function(err) {
|
||||
if (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
return;
|
||||
}
|
||||
res.json({ message: 'Movement deleted' });
|
||||
});
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server running at http://localhost:${port}`);
|
||||
});
|
||||
Reference in New Issue
Block a user