50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import express from 'express';
|
|
import cors from 'cors';
|
|
import path from 'path';
|
|
import { initialize, getDb } from './models/db.js';
|
|
import entriesRouter from './routes/entries.js';
|
|
import foodsRouter from './routes/foods.js';
|
|
import summaryRouter from './routes/summary.js';
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
app.use('/uploads', express.static('./uploads'));
|
|
app.use(express.static('./public'));
|
|
|
|
initialize();
|
|
|
|
// Routes
|
|
app.use('/api/entries', entriesRouter);
|
|
app.use('/api/foods', foodsRouter);
|
|
app.use('/api/summary', summaryRouter);
|
|
|
|
// Favorites routes inline
|
|
app.get('/api/favorites', (req, res) => {
|
|
const db = getDb();
|
|
res.json(db.prepare('SELECT * FROM entries WHERE favorite = 1 ORDER BY name ASC').all());
|
|
});
|
|
|
|
app.post('/api/entries/:id/favorite', (req, res) => {
|
|
const db = getDb();
|
|
const { id } = req.params;
|
|
const entry = db.prepare('SELECT favorite FROM entries WHERE id = ?').get(id);
|
|
if (!entry) return res.status(404).json({ error: 'Not found' });
|
|
const newVal = entry.favorite ? 0 : 1;
|
|
db.prepare('UPDATE entries SET favorite = ? WHERE id = ?').run(newVal, id);
|
|
res.json({ id, favorite: newVal });
|
|
});
|
|
|
|
// SPA fallback
|
|
app.get('*', (req, res) => {
|
|
res.sendFile(path.join(process.cwd(), 'public', 'index.html'));
|
|
});
|
|
|
|
app.listen(PORT, '0.0.0.0', () => {
|
|
console.log('Meal Tracker running on port ' + PORT);
|
|
});
|