import express from 'express'; import { ApolloServer } from '@apollo/server'; import { expressMiddleware } from '@apollo/server/express4'; import { json } from 'body-parser'; import { typeDefs } from './graphql/schema'; import { resolvers } from './graphql/resolvers'; import { createDb } from './db'; import logger from './logger'; import { TestPrinter } from './printer/test-printer'; import cors from 'cors'; const app = express(); const port = process.env.PORT || 4000; async function startServer() { const db = createDb(); const printer = new TestPrinter(); const server = new ApolloServer({ typeDefs, resolvers, }); await server.start(); // Enable CORS for the frontend app.use(cors({ origin: 'http://localhost:5173', credentials: true })); app.use(json()); app.use( '/graphql', expressMiddleware(server, { context: async () => ({ db, printer }), }) ); const httpServer = app.listen(port, () => { logger.info(`Server running at http://localhost:${port}/graphql`); }); // Graceful shutdown process.on('SIGTERM', () => { logger.info('SIGTERM received. Shutting down gracefully...'); httpServer.close(() => { logger.info('Server closed'); process.exit(0); }); }); process.on('SIGINT', () => { logger.info('SIGINT received. Shutting down gracefully...'); httpServer.close(() => { logger.info('Server closed'); process.exit(0); }); }); } startServer().catch((error) => { logger.error('Failed to start server:', error); process.exit(1); });