Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions shatter-backend/src/controllers/event_controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -290,3 +290,41 @@ export async function joinEventAsGuest(req: Request, res: Response) {
return res.status(500).json({ success: false, msg: "Internal error" });
}
}

/**
* GET /api/events/:eventId
* Get event details by event ID
*
* @param req.params.eventId - Event ID (required)
*
* @returns 200 with event details on success
* @returns 400 if eventId is missing
* @returns 404 if event is not found
*/
export async function getEventById(req: Request, res: Response) {
try {
const { eventId } = req.params;

if (!eventId) {
return res
.status(400)
.json({ success: false, error: "eventId is required" });
}

const event = await Event.findById(eventId).populate(
"participantIds",
"name userId",
);

if (!event) {
return res.status(404).json({ success: false, error: "Event not found" });
}

res.status(200).json({
success: true,
event,
});
} catch (err: any) {
res.status(500).json({ success: false, error: err.message });
}
}
49 changes: 49 additions & 0 deletions shatter-backend/src/controllers/user_controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,52 @@ export const createUser = async (req: Request, res: Response) => {
res.status(500).json({ error: "Failed to create user" });
}
};

// controller: GET /api/users/:userId
// Get a specific user by ID
export const getUserById = async (req: Request, res: Response) => {
try {
const { userId } = req.params;

if (!userId) {
return res.status(400).json({ success: false, error: "userId is required" });
}

const user = await User.findById(userId).select("-passwordHash");

if (!user) {
return res.status(404).json({ success: false, error: "User not found" });
}

res.status(200).json({ success: true, user });
} catch (err: any) {
res.status(500).json({ success: false, error: err.message });
}
};

// controller: GET /api/users/:userId/events
// Get all events that a user has joined
export const getUserEvents = async (req: Request, res: Response) => {
try {
const { userId } = req.params;

if (!userId) {
return res.status(400).json({ success: false, error: "userId is required" });
}

const user = await User.findById(userId)
.populate("eventHistoryIds", "name description joinCode startDate endDate currentState")
.select("eventHistoryIds");

if (!user) {
return res.status(404).json({ success: false, error: "User not found" });
}

res.status(200).json({
success: true,
events: user.eventHistoryIds,
});
} catch (err: any) {
res.status(500).json({ success: false, error: err.message });
}
};
3 changes: 2 additions & 1 deletion shatter-backend/src/routes/event_routes.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Router } from 'express';
import { createEvent, getEventByJoinCode, joinEventAsUser, joinEventAsGuest } from '../controllers/event_controller';
import { createEvent, getEventByJoinCode, getEventById, joinEventAsUser, joinEventAsGuest } from '../controllers/event_controller';
import { authMiddleware } from '../middleware/auth_middleware';

const router = Router();


router.post("/createEvent", authMiddleware, createEvent);
router.get("/event/:joinCode", getEventByJoinCode);
router.get("/:eventId", getEventById);
router.post("/:eventId/join/user", authMiddleware, joinEventAsUser);
router.post("/:eventId/join/guest", joinEventAsGuest);

Expand Down
8 changes: 7 additions & 1 deletion shatter-backend/src/routes/user_route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Router, Request, Response } from 'express';
import { getUsers, createUser } from '../controllers/user_controller';
import { getUsers, createUser, getUserById, getUserEvents } from '../controllers/user_controller';
import { authMiddleware } from '../middleware/auth_middleware';
import { User } from '../models/user_model';

Expand All @@ -22,4 +22,10 @@ router.get('/me', authMiddleware, async (req: Request, res: Response) => {
}
});

// Get all events a user has joined - must come before /:userId to avoid route conflict
router.get('/:userId/events', authMiddleware, getUserEvents);

// Get user by ID
router.get('/:userId', authMiddleware, getUserById);

export default router;