diff --git a/backend/src/models/subscribe.ts b/backend/src/models/subscribe.ts index 619e626..daa1e66 100644 --- a/backend/src/models/subscribe.ts +++ b/backend/src/models/subscribe.ts @@ -7,7 +7,7 @@ export interface ISubscribe extends mongoose.Document { } const SubscribeSchema = new mongoose.Schema({ - email: { type: String, required: true }, + email: { type: String, required: true, unique: true}, subscribedAt: { type: Date, default: Date.now }, subscribed: { type: Boolean, default: false }, }, @@ -18,6 +18,7 @@ const SubscribeSchema = new mongoose.Schema({ email: ret.email, subscribedAt: ret.subscribedAt, subscribed: ret.subscribed, + id: ret._id, } } } diff --git a/backend/src/routes/subRoutes.ts b/backend/src/routes/subRoutes.ts index 1481a55..f369e74 100644 --- a/backend/src/routes/subRoutes.ts +++ b/backend/src/routes/subRoutes.ts @@ -10,15 +10,31 @@ router.get('/data', async (req: Request, res: Response) => { }); router.post('/add', async (req: Request, res: Response) => { - const {email} = req.body; - const info = new Sub ({ - email, - subscribedAt: Date.now(), - subscribed: true - }) - await info.save(); - res.json('Subscribed successfully') -}) + const { email } = req.body; + + if (!email) { + return res.status(400).json({ message: 'Email is required' }); + } + + try { + const existingSubscription = await Sub.findOne({ email }); + + if (existingSubscription) { + return res.status(409).json({ message: 'Email is already subscribed' }); + } + const info = new Sub({ + email, + subscribedAt: Date.now(), + subscribed: true + }); + await info.save(); + res.json('Subscribed successfully'); + } catch (error) { + console.error(error); + res.status(500).json({ message: 'Internal Server Error' }); + } +}); + router.put('/leave', async (req: Request, res: Response) => { const { email } = req.body; @@ -33,6 +49,23 @@ router.put('/leave', async (req: Request, res: Response) => { res.status(500).json({ message: 'Internal Server Error' }); } }); +router.delete('/delete/:email', async (req: Request, res: Response) => { + const email = req.params.email; + try { + const foundObject = await Sub.findOne({ email }); + + if (!foundObject) { + return res.status(404).json({ message: 'Object not found' }); + } + + await Sub.findByIdAndDelete(foundObject._id); + res.json('Deleted successfully'); + } catch (error) { + console.error(error); + res.status(500).json({ message: 'Internal Server Error' }); + } +}); + // swagger to get all subscribers /**