From 326bf318a1ac909fc84b4422f5081fdebdd72423 Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 10 Mar 2026 12:56:54 -0500 Subject: [PATCH] feat: Integrate startup log utility in server initialization --- server/index.js | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/server/index.js b/server/index.js index b7c32a4..7d9ea70 100644 --- a/server/index.js +++ b/server/index.js @@ -4,6 +4,7 @@ const helmet = require('helmet'); const path = require('path'); const fs = require('fs'); const { initDatabase } = require('./db/init'); +const { logStartupBanner } = require('./utils/startupLog'); const app = express(); const PORT = process.env.PORT || 3000; @@ -20,22 +21,23 @@ const DATA_DIR = process.env.DATA_DIR || path.join(__dirname, '../data'); // Init DB (path is managed internally by db/init.js) console.log('Initializing database...'); initDatabase(); +const dbStatus = '✓ Connected'; console.log('✓ Database ready!\n'); -// ── Middleware ────────────────────────────────────────────────────────── +// ── Middleware ───────────────────────────────────────────────────────── app.use(helmet({ contentSecurityPolicy: false })); app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); -// ── Static file serving ───────────────────────────────────────────── +// ── Static file serving ────────────────────────────────────────────── app.use('/uploads', express.static(UPLOAD_PATH)); app.use('/static', express.static(STATIC_PATH)); app.use('/uploads', (_req, res) => res.status(404).json({ error: 'Upload not found' })); app.use('/static', (_req, res) => res.status(404).json({ error: 'Static asset not found' })); -// ── API Routes ──────────────────────────────────────────────────────── -app.use('/api/dogs', require('./routes/dogs')); +// ── API Routes ────────────────────────────────────────────────────────── +app.use('/api/dogs', require('./routes/dogs')); app.use('/api/litters', require('./routes/litters')); app.use('/api/health', require('./routes/health')); app.use('/api/genetics', require('./routes/genetics')); @@ -43,16 +45,16 @@ app.use('/api/pedigree', require('./routes/pedigree')); app.use('/api/breeding', require('./routes/breeding')); app.use('/api/settings', require('./routes/settings')); -// ── Production SPA fallback ─────────────────────────────────────────── +// ── Production SPA fallback ──────────────────────────────────────────────── if (process.env.NODE_ENV === 'production') { const clientBuild = path.join(__dirname, '../client/dist'); app.use(express.static(clientBuild)); - app.get(/^(?!\/(?:api|static|uploads)\/).+$/, (_req, res) => { + app.get(/^(?!\/(?: api|static|uploads)\/).*$/, (_req, res) => { res.sendFile(path.join(clientBuild, 'index.html')); }); } -// ── Global error handler ────────────────────────────────────────────── +// ── Global error handler ────────────────────────────────────────────────── app.use((err, _req, res, _next) => { console.error('Error:', err); res.status(err.status || 500).json({ @@ -62,15 +64,16 @@ app.use((err, _req, res, _next) => { }); app.listen(PORT, '0.0.0.0', () => { - console.log(`\n🐕 BREEDR Server Running`); - console.log(`=============================================`); - console.log(`Environment : ${process.env.NODE_ENV || 'development'}`); - console.log(`Port : ${PORT}`); - console.log(`Data dir : ${DATA_DIR}`); - console.log(`Uploads : ${UPLOAD_PATH}`); - console.log(`Static : ${STATIC_PATH}`); - console.log(`Access : http://localhost:${PORT}`); - console.log(`=============================================\n`); + // Display comprehensive startup log + logStartupBanner({ + appName: 'BREEDR', + port: PORT, + environment: process.env.NODE_ENV || 'development', + dataDir: DATA_DIR, + uploadPath: UPLOAD_PATH, + staticPath: STATIC_PATH, + dbStatus: dbStatus + }); }); -module.exports = app; +module.exports = app; \ No newline at end of file