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