Verify_India_API/src/index.js

135 lines
3.4 KiB
JavaScript

// Main entry point for VerifyIndia API
require('dotenv').config();
const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const morgan = require('morgan');
const { connectDB } = require('./database/connection');
const authRoutes = require('./routes/auth');
const ifscRoutes = require('./routes/ifsc');
const pincodeRoutes = require('./routes/pincode');
const gstRoutes = require('./routes/gst');
const panRoutes = require('./routes/pan');
console.log('✅ PAN routes loaded:', typeof panRoutes);
const bankRoutes = require('./routes/bank');
const userRoutes = require('./routes/user');
const { errorHandler } = require('./middleware/errorHandler');
const app = express();
app.use(helmet());
app.use(cors());
// JSON body parser with error handling
app.use(express.json({
limit: '10mb',
verify: (req, res, buf) => {
try {
JSON.parse(buf);
} catch (e) {
console.error('JSON parse error:', e.message);
res.status(400).json({
success: false,
error: { code: 'INVALID_JSON', message: 'Invalid JSON in request body' }
});
}
}
}));
// Debug middleware to log all requests
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.originalUrl}`);
console.log('Headers:', req.headers);
console.log('Body:', req.body);
next();
});
app.use(morgan('combined'));
app.get('/health', (req, res) => {
res.json({ status: 'healthy', timestamp: new Date().toISOString() });
});
app.get('/', (req, res) => {
res.json({
message: 'VerifyIndia API',
version: 'v1',
endpoints: {
ifsc: '/v1/ifsc/:ifsc_code',
pincode: '/v1/pincode/:pincode',
gst: '/v1/gst/verify/:gstin',
pan: '/v1/pan/verify',
bank: '/v1/bank/verify'
}
});
});
app.use('/v1/auth', authRoutes);
app.use('/v1/user', userRoutes);
app.use('/v1/ifsc', ifscRoutes);
app.use('/v1/pincode', pincodeRoutes);
app.use('/v1/gst', gstRoutes);
// Test route to verify routing works (must be BEFORE panRoutes)
app.get('/v1/pan/test', (req, res) => {
console.log('PAN test route hit!');
res.json({ message: 'PAN route is working', timestamp: new Date().toISOString() });
});
// Log all registered routes for debugging
console.log('Registering PAN routes at /v1/pan');
app.use('/v1/pan', panRoutes);
console.log('PAN routes registered');
app.use('/v1/bank', bankRoutes);
app.use('*', (req, res) => {
res.status(404).json({
success: false,
error: { code: 'NOT_FOUND', message: `Route ${req.originalUrl} not found` }
});
});
app.use(errorHandler);
const PORT = process.env.PORT || 3000;
async function startServer() {
try {
await connectDB();
console.log('✅ PostgreSQL connected');
// // Try to connect Redis, but don't fail if it's not available
// try {
// const { connectRedis, isDummyCache } = require('./cache/redis');
// await connectRedis();
// if (isDummyCache()) {
// console.log('📦 Using in-memory cache (Redis not available)');
// } else {
// console.log('✅ Redis connected');
// }
// } catch (redisError) {
// console.log('📦 Using in-memory cache (Redis connection failed)');
// }
app.listen(PORT, () => {
console.log(`✅ Server running on port ${PORT}`);
});
} catch (error) {
console.error('❌ Failed to start:', error);
process.exit(1);
}
}
startServer();