task_receipts/server/src/index.ts

58 lines
1.4 KiB
TypeScript
Raw Normal View History

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