| global.isStrikeRunning = false; |
|
|
| require('dotenv').config(); |
| const express = require('express'); |
| const mongoose = require('mongoose'); |
| const cors = require('cors'); |
| const { generateKUS } = require('./utils/kusGenerator'); |
|
|
| const authRoute = require('./routes/auth'); |
| const marketRoute = require('./routes/market'); |
| const adminRoute = require('./routes/admin'); |
|
|
| |
| const User = require('./models/User'); |
| const Transaction = require('./models/Transaction'); |
| const Asset = require('./models/Asset'); |
| const notificationRoute = require('./routes/notification'); |
|
|
| const startStrike = require('./jobs/strike'); |
|
|
| const logTransaction = require('./utils/ledgerLogger'); |
| const { sendToUser } = require('./utils/sendPush'); |
|
|
| startStrike(); |
|
|
| const app = express(); |
|
|
| |
| app.use(cors()); |
| app.use(express.json()); |
|
|
| |
| app.use('/api/auth', authRoute); |
| app.use('/api/market', marketRoute); |
| app.use('/api/admin', adminRoute); |
| app.use('/api/notifications', notificationRoute); |
| app.use("/api/strike", require("./routes/strike")); |
| app.use('/api/fairness', require('./routes/fairness')); |
|
|
| |
| |
| |
| app.get('/', (req, res) => { |
| res.send('KoshX System: Securely Running....'); |
| }); |
|
|
| |
| |
| |
| app.post('/api/webhook/sms-capture', async (req, res) => { |
| try { |
| |
| const secret = req.headers['x-admin-secret']; |
| if (secret !== process.env.ADMIN_SECRET) { |
| console.log('Unauthorized Webhook Attempt'); |
| return res.status(403).json({ error: "Access Denied" }); |
| } |
|
|
| |
| const { utr, amount } = req.body; |
| console.log(`[Webhook] Received UTR: ${utr}`); |
|
|
| |
| |
| |
| |
| |
| const transaction = await Transaction.findOne({ utr: utr, status: 'Pending' }); |
|
|
| if (!transaction) { |
| return res.status(404).json({ message: "Transaction not found or already verified." }); |
| } |
|
|
| |
| const newKUS = await generateKUS(transaction.tier); |
|
|
| |
| const newAsset = new Asset({ |
| owner_id: transaction.user_id, |
| kus_id: newKUS, |
| tier: transaction.tier |
| }); |
| await newAsset.save(); |
|
|
| |
| transaction.status = 'Verified'; |
| await transaction.save(); |
|
|
| |
| const assetCount = await Asset.countDocuments({ owner_id: tx.user_id }); |
| if (assetCount === 1) { |
| const user = await User.findById(tx.user_id); |
| if (user.referred_by) { |
| const referrer = await User.findOne({ referral_code: user.referred_by }); |
| if (referrer) { |
| let reward = 0; |
| if (tx.tier === 'Silver') reward = 100; |
| if (tx.tier === 'Gold') reward = 150; |
| if (tx.tier === 'Platinum') reward = 250; |
| |
| let userReward = 0; |
| if (tx.tier === 'Silver') reward = 50; |
| if (tx.tier === 'Gold') reward = 75; |
| if (tx.tier === 'Platinum') reward = 125; |
| |
| referrer.points += reward; |
| await referrer.save(); |
| |
| user.points += userReward; |
| await user.save(); |
| |
| await logTransaction(referrer._id, 'REFERRAL_BONUS', reward, 'INR', `Referral Bonus Tier: ${tx.tier}`); |
| await sendToUser(referrer._id, "Referral Bonus Credited", `${reward} points credited to your account.`, "/profile"); |
| |
| await logTransaction(user._id, 'REFERRAL_BONUS', userReward, 'INR', `Referral Bonus Tier: ${tx.tier}`); |
| await sendToUser(user._id, "Referral Bonus Credited", `${userReward} points credited to your account.`, "/profile"); |
| |
| console.log(`[Referral] ${reward} points added to ${referrer.name}`); |
| } |
| } |
| } |
|
|
| console.log(`[Success] Asset ${newKUS} generated for UTR ${utr}`); |
| res.status(200).json({ success: true, kus: newKUS }); |
|
|
| } catch (error) { |
| console.error("Webhook Error:", error); |
| res.status(500).json({ error: "Server Internal Error" }); |
| } |
| }); |
|
|
| |
| mongoose.connect(process.env.MONGO_URI) |
| .then(() => { |
| console.log('✅ Connected to MongoDB Atlas'); |
| app.listen(process.env.PORT, '0.0.0.0', () => { |
| console.log(`🚀 Server running on port ${process.env.PORT}`); |
| }); |
| }) |
| .catch((err) => console.error('❌ DB Connection Error:', err)); |
|
|