Skip to content
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,41 @@ git push origin <your_branch_name>
- Celebrate 🥳 your success after your pull request is merged successfully.
<p align="right">(<a href="#top">back to top</a>)</p>

# Backend Setup Instructions


1. Ensure Node.js and npm are installed on your system. You can verify installation by running:
```
node -v
npm -v
```

2. Navigate to the backend directory:
```
cd server
```

3. Install the required dependencies:
```
npm install
```

4. Create a .env file in the backend root directory and add your environment variables. Here's an example structure:
```
MONGO_URI="mongodb+srv://<your_mongo_db_url>.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0"
SECRET_KEY="THIS_IS_A_JWT_SECRET"
```

5. Start the backend server using nodemon:
```
nodemon api/index.js
```

This will start the server in development mode. By default, it will run on http://localhost:3000.

Test the API endpoints using tools like Postman or Thunder Client.


<!-------------------------------------------------->

<h2>Contributing Guidelines📑</h2>
Expand Down
101 changes: 101 additions & 0 deletions server/controllers/event.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { Event } from "../model/event.model.js";
import { User } from "../model/user.model.js";
import jwt from "jsonwebtoken";

const secretKey = process.env.JWT_SECRET; // Ensure you have your secret key set in env

// Add a new event
const addEvent = async (req, res) => {
try {
const { title, description, date } = req.body;
const authHeader = req.headers.authorization;

if (!authHeader) {
return res.status(401).json({ error: "No token provided." });
}

const token = authHeader.split(" ")[1];
let decoded;
try {
decoded = jwt.verify(token, secretKey);
} catch (err) {
return res.status(401).json({ error: "Invalid or expired token." });
}

const organizerId = decoded.userId;
const organizer = await User.findById(organizerId);
if (!organizer) {
return res.status(404).json({ error: "Organizer not found." });
}

if (!title || !description || !date) {
return res.status(400).json({ message: "All fields are required." });
}

const event = new Event({ title, description, date, organizer: organizerId });
await event.save();

res.status(201).json({ message: "Event created successfully.", event });
} catch (error) {
res.status(500).json({ message: "Server Error", error: error.message });
}
};

// Delete an event by ID
const deleteEvent = async (req, res) => {
try {
const { id } = req.params;
const authHeader = req.headers.authorization;

if (!authHeader) {
return res.status(401).json({ error: "No token provided." });
}

const token = authHeader.split(" ")[1];
let decoded;
try {
decoded = jwt.verify(token, secretKey);
} catch (err) {
return res.status(401).json({ error: "Invalid or expired token." });
}

const organizerId = decoded.userId;

const event = await Event.findOneAndDelete({ _id: id, organizer: organizerId });
if (!event) {
return res.status(404).json({ message: "Event not found or unauthorized." });
}

res.status(200).json({ message: "Event deleted successfully." });
} catch (error) {
res.status(500).json({ message: "Server Error", error: error.message });
}
};

// Get all events
const getAllEvents = async (req, res) => {
try {
const events = await Event.find().populate("organizer", "name email");
res.status(200).json(events);
} catch (error) {
res.status(500).json({ message: "Server Error", error: error.message });
}
};

// Get event by ID
const getEventbyId = async (req, res) => {
try {
const { id } = req.params;
const event = await Event.findById(id).populate("organizer", "name email");

if (!event) {
return res.status(404).json({ message: "Event not found." });
}

res.status(200).json(event);
} catch (error) {
res.status(500).json({ message: "Server Error", error: error.message });
}
};

export { addEvent, deleteEvent, getAllEvents, getEventbyId };
25 changes: 25 additions & 0 deletions server/model/event.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import mongoose from "mongoose";

const eventSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
desc: {
type: String,
required: true
},
eventDate: {
type: Date,
required: true
},
organiser: {
type: mongoose.Schema.Types.ObjectId,
ref:"User",
required: true
}
});

const Event = mongoose.model('Event', eventSchema);

export { Event };