Skip to content
3 changes: 2 additions & 1 deletion server/api/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ app.use(express.urlencoded({ extended: true, limit: '16kb' }));
//import roouter
import { authRouter } from "../routes/auth.routes.js"
import { profileRouter } from "../routes/profile.routes.js"

import { eventRouter } from "../routes/event.routes.js"

//use router
app.use("/api/v1/auth", authRouter)
app.use('/api/v1/profile', profileRouter)
app.use('/api/v1/event', eventRouter)
export {app}
104 changes: 104 additions & 0 deletions server/controllers/event.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { Event } from "../model/event.model.js";
import { User } from "../model/user.model.js";
import jwt from "jsonwebtoken";

const secretKey = process.env.SECRET_KEY; // Ensure you have your secret key set in env
if (!secretKey) {
console.error("JWT secret key not set. Exiting...");
process.exit(1);
}
// 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.id;
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." });
}
console.log(date,description,title, organizerId)
const event = new Event({ title:title, description:description, 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
},
description: {
type: String,
required: true
},
eventDate: {
type: Date,
// required: true
},
organizer: {
type: mongoose.Schema.Types.ObjectId,
ref:"User",
required: true
}
});

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

export { Event };
12 changes: 12 additions & 0 deletions server/routes/event.routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import express from 'express';
import { addEvent,deleteEvent,getAllEvents,getEventbyId } from '../controllers/event.controller.js';


const eventRouter = express.Router();

eventRouter.post('/add', addEvent);
eventRouter.delete('/delete/:id', deleteEvent);
eventRouter.get('/allevents', getAllEvents);
eventRouter.get('/:id', getEventbyId);

export { eventRouter };
32 changes: 32 additions & 0 deletions server/vercel.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"version": 2,
"builds": [
{
"src": "api/index.js",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "api/index.js",
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"OPTIONS"
]
},
{
"src": "/api/(.*)",
"headers": {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
"Access-Control-Allow-Headers": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version"
}
}
]
}