// Folder structure: // mahadevbook/ // ├── server.js // ├── .env // ├── models/User.js // ├── routes/auth.js // ├── routes/payment.js // ├── public/ // ├── login.html // ├── register.html // ├── deposit.html // ├── index.html // ├── styles.css // ├── logo.jpg // ├── banner.jpg // ------------------ server.js ------------------ const express = require('express'); const mongoose = require('mongoose'); const dotenv = require('dotenv'); const cors = require('cors'); const path = require('path'); dotenv.config(); const app = express(); app.use(cors()); app.use(express.json()); app.use(express.static(path.join(__dirname, 'public'))); mongoose.connect(process.env.MONGO_URI) .then(() => console.log('MongoDB connected')) .catch(err => console.error(err)); app.use('/api/auth', require('./routes/auth')); app.use('/api/payment', require('./routes/payment')); const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`)); // ------------------ .env ------------------ PORT=5000 MONGO_URI=mongodb://127.0.0.1:27017/mahadevbook JWT_SECRET=secret123 RAZORPAY_KEY_ID=your_razorpay_key_id RAZORPAY_KEY_SECRET=your_razorpay_key_secret // ------------------ models/User.js ------------------ const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, mobile: { type: String, required: true, unique: true }, password: String }, { timestamps: true }); module.exports = mongoose.model('User', userSchema); // ------------------ routes/auth.js ------------------ const express = require('express'); const bcrypt = require('bcryptjs'); const User = require('../models/User'); const router = express.Router(); router.post('/register', async (req, res) => { const { name, mobile, password } = req.body; try { const exists = await User.findOne({ mobile }); if (exists) return res.status(400).json({ msg: 'Mobile already registered' }); const hashed = await bcrypt.hash(password, 10); const newUser = new User({ name, mobile, password: hashed }); await newUser.save(); res.status(201).json({ msg: 'User registered successfully' }); } catch (err) { res.status(500).json({ msg: 'Server error' }); } }); router.post('/login', async (req, res) => { const { mobile, password } = req.body; try { const user = await User.findOne({ mobile }); if (!user) return res.status(400).json({ msg: 'User not found' }); const match = await bcrypt.compare(password, user.password); if (!match) return res.status(401).json({ msg: 'Invalid credentials' }); res.status(200).json({ msg: 'Login successful', user }); } catch (err) { res.status(500).json({ msg: 'Server error' }); } }); module.exports = router; // ------------------ routes/payment.js ------------------ const express = require('express'); const Razorpay = require('razorpay'); require('dotenv').config(); const router = express.Router(); const razorpay = new Razorpay({ key_id: process.env.RAZORPAY_KEY_ID, key_secret: process.env.RAZORPAY_KEY_SECRET }); router.post('/order', async (req, res) => { const { amount } = req.body; try { const order = await razorpay.orders.create({ amount: amount * 100, currency: 'INR', receipt: `receipt_${Date.now()}` }); res.status(200).json(order); } catch (err) { res.status(500).json({ msg: 'Error creating order' }); } }); module.exports = router; // ------------------ public/index.html ------------------