Skip to content

Commit 602ec87

Browse files
authored
Added event related backend controllers (#103)
1 parent 5378520 commit 602ec87

File tree

5 files changed

+175
-1
lines changed

5 files changed

+175
-1
lines changed

server/api/app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ app.use(express.urlencoded({ extended: true, limit: '16kb' }));
1919
//import roouter
2020
import { authRouter } from "../routes/auth.routes.js"
2121
import { profileRouter } from "../routes/profile.routes.js"
22-
22+
import { eventRouter } from "../routes/event.routes.js"
2323

2424
//use router
2525
app.use("/api/v1/auth", authRouter)
2626
app.use('/api/v1/profile', profileRouter)
27+
app.use('/api/v1/event', eventRouter)
2728
export {app}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import { Event } from "../model/event.model.js";
2+
import { User } from "../model/user.model.js";
3+
import jwt from "jsonwebtoken";
4+
5+
const secretKey = process.env.SECRET_KEY; // Ensure you have your secret key set in env
6+
if (!secretKey) {
7+
console.error("JWT secret key not set. Exiting...");
8+
process.exit(1);
9+
}
10+
// Add a new event
11+
const addEvent = async (req, res) => {
12+
try {
13+
const { title, description, date } = req.body;
14+
const authHeader = req.headers.authorization;
15+
16+
if (!authHeader) {
17+
return res.status(401).json({ error: "No token provided." });
18+
}
19+
20+
const token = authHeader.split(" ")[1];
21+
let decoded;
22+
try {
23+
decoded = jwt.verify(token, secretKey);
24+
} catch (err) {
25+
return res.status(401).json({ error: "Invalid or expired token." });
26+
}
27+
28+
const organizerId = decoded.id;
29+
const organizer = await User.findById(organizerId);
30+
if (!organizer) {
31+
return res.status(404).json({ error: "Organizer not found." });
32+
}
33+
34+
if (!title || !description || !date) {
35+
return res.status(400).json({ message: "All fields are required." });
36+
}
37+
console.log(date,description,title, organizerId)
38+
const event = new Event({ title:title, description:description, organizer: organizerId });
39+
await event.save();
40+
41+
res.status(201).json({ message: "Event created successfully.", event });
42+
} catch (error) {
43+
res.status(500).json({ message: "Server Error", error: error.message });
44+
}
45+
};
46+
47+
// Delete an event by ID
48+
const deleteEvent = async (req, res) => {
49+
try {
50+
const { id } = req.params;
51+
const authHeader = req.headers.authorization;
52+
53+
if (!authHeader) {
54+
return res.status(401).json({ error: "No token provided." });
55+
}
56+
57+
const token = authHeader.split(" ")[1];
58+
let decoded;
59+
try {
60+
decoded = jwt.verify(token, secretKey);
61+
} catch (err) {
62+
return res.status(401).json({ error: "Invalid or expired token." });
63+
}
64+
65+
const organizerId = decoded.userId;
66+
67+
const event = await Event.findOneAndDelete({ _id: id, organizer: organizerId });
68+
if (!event) {
69+
return res.status(404).json({ message: "Event not found or unauthorized." });
70+
}
71+
72+
res.status(200).json({ message: "Event deleted successfully." });
73+
} catch (error) {
74+
res.status(500).json({ message: "Server Error", error: error.message });
75+
}
76+
};
77+
78+
// Get all events
79+
const getAllEvents = async (req, res) => {
80+
try {
81+
const events = await Event.find().populate("organizer", "name email");
82+
res.status(200).json(events);
83+
} catch (error) {
84+
res.status(500).json({ message: "Server Error", error: error.message });
85+
}
86+
};
87+
88+
// Get event by ID
89+
const getEventbyId = async (req, res) => {
90+
try {
91+
const { id } = req.params;
92+
const event = await Event.findById(id).populate("organizer", "name email");
93+
94+
if (!event) {
95+
return res.status(404).json({ message: "Event not found." });
96+
}
97+
98+
res.status(200).json(event);
99+
} catch (error) {
100+
res.status(500).json({ message: "Server Error", error: error.message });
101+
}
102+
};
103+
104+
export { addEvent, deleteEvent, getAllEvents, getEventbyId };

server/model/event.model.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import mongoose from "mongoose";
2+
3+
const eventSchema = new mongoose.Schema({
4+
title: {
5+
type: String,
6+
required: true
7+
},
8+
description: {
9+
type: String,
10+
required: true
11+
},
12+
eventDate: {
13+
type: Date,
14+
// required: true
15+
},
16+
organizer: {
17+
type: mongoose.Schema.Types.ObjectId,
18+
ref:"User",
19+
required: true
20+
}
21+
});
22+
23+
const Event = mongoose.model('Event', eventSchema);
24+
25+
export { Event };

server/routes/event.routes.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import express from 'express';
2+
import { addEvent,deleteEvent,getAllEvents,getEventbyId } from '../controllers/event.controller.js';
3+
4+
5+
const eventRouter = express.Router();
6+
7+
eventRouter.post('/add', addEvent);
8+
eventRouter.delete('/delete/:id', deleteEvent);
9+
eventRouter.get('/allevents', getAllEvents);
10+
eventRouter.get('/:id', getEventbyId);
11+
12+
export { eventRouter };

server/vercel.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"version": 2,
3+
"builds": [
4+
{
5+
"src": "api/index.js",
6+
"use": "@vercel/node"
7+
}
8+
],
9+
"routes": [
10+
{
11+
"src": "/(.*)",
12+
"dest": "api/index.js",
13+
"methods": [
14+
"GET",
15+
"POST",
16+
"PUT",
17+
"DELETE",
18+
"PATCH",
19+
"OPTIONS"
20+
]
21+
},
22+
{
23+
"src": "/api/(.*)",
24+
"headers": {
25+
"Access-Control-Allow-Credentials": "true",
26+
"Access-Control-Allow-Origin": "*",
27+
"Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
28+
"Access-Control-Allow-Headers": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version"
29+
}
30+
}
31+
]
32+
}

0 commit comments

Comments
 (0)