backend first draft
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const path = require('path');
|
||||
const cron = require('node-cron');
|
||||
|
||||
const db = require('./db');
|
||||
const { fetchAllFeeds } = require('./feedFetcher');
|
||||
const foldersRouter = require('./routes/folders');
|
||||
const feedsRouter = require('./routes/feeds');
|
||||
const articlesRouter = require('./routes/articles');
|
||||
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 8080;
|
||||
const FETCH_INTERVAL_MIN = Number(process.env.FETCH_INTERVAL_MINUTES || 15);
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json({ limit: '2mb' }));
|
||||
|
||||
app.use('/api/folders', foldersRouter);
|
||||
app.use('/api/feeds', feedsRouter);
|
||||
app.use('/api/articles', articlesRouter);
|
||||
|
||||
app.get('/api/stats', (req, res) => {
|
||||
const feedCount = db.prepare('SELECT COUNT(*) c FROM feeds').get().c;
|
||||
const unread = db.prepare('SELECT COUNT(*) c FROM articles WHERE is_read = 0').get().c;
|
||||
const starred = db.prepare('SELECT COUNT(*) c FROM articles WHERE is_starred = 1').get().c;
|
||||
res.json({ feedCount, unread, starred });
|
||||
});
|
||||
|
||||
app.get('/api/health', (req, res) => res.json({ ok: true }));
|
||||
|
||||
// Serve built frontend
|
||||
const FRONTEND_DIST = path.join(__dirname, 'public');
|
||||
app.use(express.static(FRONTEND_DIST));
|
||||
app.get(/^(?!\/api).*/, (req, res) => {
|
||||
res.sendFile(path.join(FRONTEND_DIST, 'index.html'));
|
||||
});
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Dispatch RSS reader listening on port ${PORT}`);
|
||||
// Fetch on boot, then on a schedule
|
||||
fetchAllFeeds().then((r) => console.log(`Initial fetch complete: ${r.length} feeds`)).catch((e) => console.error(e));
|
||||
});
|
||||
|
||||
cron.schedule(`*/${FETCH_INTERVAL_MIN} * * * *`, () => {
|
||||
console.log('Running scheduled feed fetch...');
|
||||
fetchAllFeeds().then((r) => console.log(`Scheduled fetch complete: ${r.length} feeds`)).catch((e) => console.error(e));
|
||||
});
|
||||
Reference in New Issue
Block a user