task_receipts/server/src/index.ts
2025-06-14 16:09:21 -05:00

65 lines
1.5 KiB
TypeScript

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);
});