const path = require('path'); const mysql = require('mysql'); const express = require('express'); const moment = require('moment-timezone'); const fs = require('fs'); const bodyParser = require('body-parser'); /* Database setup */ const dbPool = mysql.createPool({ host: process.env.MYSQL_HOST || 'localhost', user: process.env.MYSQL_USER || 'root', password: process.env.MYSQL_PASSWORD || undefined, database: process.env.MYSQL_DATABASE || 'vizon', socketPath: process.env.MYSQL_SOCKET_PATH || undefined, timezone: process.env.TZ || 'local', debug: process.env.NODE_ENV === 'development', }); const tableNames = { drawings: process.env.MYSQL_TABLE_DRAWINGS || 'vizon_drawings', users: process.env.MYSQL_TABLE_USERS || 'vizon_users', rankings: 'vizon_web_rankings', }; /* Frontend server setup */ const frontendDir = path.resolve(__dirname, 'dist'); const app = express(); app.set('port', (process.env.PORT || 3000)); fs.stat(frontendDir, (err) => { if (!err) { console.log(`Serving static build from ${frontendDir}`); console.log('Run `npm run clean` to return to development mode'); app.use('/', express.static(frontendDir)); } else { console.log('Serving development build with nwb middleware'); console.log('Run `npm run build` to create a production build'); // eslint-disable-next-line import/no-extraneous-dependencies app.use(require('nwb/express')(express, { entry: 'src/index.jsx', reload: true, })); } }); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // Additional middleware which will set headers that we need on each request. app.use((req, res, next) => { // Disable caching so we'll always get the latest comments. res.setHeader('Cache-Control', 'no-cache'); next(); }); function calculateRankings(id: Number) { db.query('SELECT * FROM `vizon_web_rankings` WHERE `vizon_drawings_id`=?', [id], (err, results, fields) => { if (err) { console.error('Failed to query rankings from database:', err); res.status(500).json({ error: 'Database query failed', }); } }); } app.get('/api/status', (req, res) => { dbPool.getConnection((err, db) => { if (err) { console.error('Failed to connect to database:', err); res.status(500).json({ error: 'Database connection failed', }); } db.query('SELECT * FROM ?? ORDER BY ?? DESC LIMIT 0, 1', [ tableNames.drawings, 'id', ], (qerr, results, fields) => { if (qerr) { console.error('Failed to request drawings:', err); res.status(500).json({ error: 'Database query failed', }); return; } const row = results[0]; const id = row.id; const date = moment(row.drawing_date); const numbers = [ row.first, row.second, row.third, row.fourth, row.fifth, row.sixth, ].map(i => parseInt(i, 10)); const ranking = [ // @TODO - calculate ranking from mysql tables {drawings} and {bets} ]; res.json({ lastDrawing: { id, date, numbers, ranking, }, }); }); }); }); app.listen(app.get('port'), () => { console.log(`Server started: http://localhost:${app.get('port')}/`); });