135 lines
3.4 KiB
JavaScript
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();
|
|
|
|
|
|
|
|
|