|
|
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)); |
|
|
|