const express = require('express'); const rateLimit = require('express-rate-limit'); const helmet = require('helmet'); const cors = require('cors'); const mongoose = require('mongoose'); require('dotenv').config(); const app = express(); const PORT = 7860; const API_KEY = process.env.API_KEY; const MONGO_URI = process.env.MONGO_URI; app.use(express.json()); app.use(helmet()); app.use(cors()); const limiter = rateLimit({ windowMs: 10 * 60 * 1000, max: 100, message: { error: 'Too many requests, slow down.' } }); app.use(limiter); mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }).then(() => console.log('MongoDB connected')) .catch(err => { console.error('MongoDB error:', err); process.exit(1); }); const Ad = mongoose.model('Ad', new mongoose.Schema({ link: String, message: String, image: String, createdAt: { type: Date, default: Date.now } })); function auth(req, res, next) { const key = req.headers['x-api-key']; if (key !== API_KEY) return res.status(403).json({ error: 'Forbidden' }); next(); } app.post('/ads', auth, async (req, res) => { const { link, message, image } = req.body; if (typeof link !== 'string' || typeof message !== 'string') { return res.status(400).json({ error: 'Invalid input' }); } const ad = new Ad({ link, message, image }); await ad.save(); res.json({ success: true, data: ad }); }); app.get('/ads', async (req, res) => { const ads = await Ad.find().sort({ createdAt: -1 }); res.json(ads); }); app.delete('/ads', auth, async (req, res) => { const result = await Ad.deleteMany({}); res.json({ success: true, deleted: result.deletedCount }); }); app.delete('/ads/:id', auth, async (req, res) => { try { const result = await Ad.findByIdAndDelete(req.params.id); if (!result) { return res.status(404).json({ error: 'Ad not found' }); } res.json({ success: true, deletedId: req.params.id }); } catch (err) { res.status(400).json({ error: 'Invalid ID' }); } }); app.listen(PORT, () => { console.log(`Server Active:${PORT}`); });