import { createServer } from 'http'; import { parse } from 'url'; import next from 'next'; import { DataSource, EntityTarget } from 'typeorm'; // Reference: https://github.com/motdotla/dotenv?tab=readme-ov-file#how-do-i-use-dotenv-with-import import 'dotenv/config' import { QuotesService } from './quotes-service'; import { initializeDataSource } from './src/data-source'; import { Payment } from './src/entity/Payment'; import { Tweet } from './src/entity/Tweet'; const port = parseInt(process.env.PORT || '3000', 10); const app = next({ dev: process.env.NODE_ENV !== 'production' }); const handle = app.getRequestHandler(); const quotesService = new QuotesService(); declare global { namespace NodeJS { interface Global { quotesService: QuotesService appDataSource: DataSource entities: { [key: string]: EntityTarget} } } } // TODO: Look for a better way to use quotesService // Initialize global quotes service global.quotesService = quotesService global.entities = { Payment, Tweet }; app.prepare().then(async() => { global.appDataSource = await initializeDataSource(); const server = createServer(async (req, res) => { const parsedUrl = parse(req.url!, true); handle(req, res, parsedUrl); }); await quotesService.fetchAndCacheQuotes(); // Initial store server.listen(port, () => { console.log(`> Server listening at http://localhost:${port}`); }); // Interval setup setInterval(async () => await quotesService.fetchAndCacheQuotes(), 5 * 60 * 1000); // Update cache every 5 minutes });