final commit

This commit is contained in:
krizam
2026-10-20 02:45:24 +05:30
commit 4ac74b8481
16 changed files with 1611 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
import express from 'express';
import Sessions from './Schema/sessions.schema.js'
import Teachers from '../Teachers/Schema/Teachers.schema.js';
import { Types } from 'mongoose';
const SessionsRoutes = express.Router();
// Get All Sessions
SessionsRoutes.get('/', async(req, res) => {
})
// Add New User for teacher
SessionsRoutes.post('/', async(req, res) => {
const {teacherId, startTime, endTime } = req.body;
//Check for teacher existance
const existingTeacher = await Teachers.findOne({_id: teacherId});
console.log('existingTeacher', existingTeacher)
if(!existingTeacher){
return res.status(400).send({message: 'Teacher Does not exist please provide valid teacherId.'})
}
// Check endTime must be greater then startTime
if(new Date(endTime) <= new Date(startTime)) {
return res.status(400).send({message: 'End time must be greater then start time.'})
}
const newSession = new Sessions({teacherId, startTime, endTime});
const result = await newSession.save();
if(result) {
return res.status(201).send({message: 'Session Added Successfully', result})
}
})
// Get Available Sessions
SessionsRoutes.get('/available', async(req: any, res) => {
const dateTimestamp = req.query.dateTimestamp;
const dateString = dateTimestamp.slice(0, 10);
// us standard dates we used here for simplicity
const startOfDay = new Date(`${dateString}T00:00:00.000Z`);
const endOfDay = new Date(`${dateString}T23:59:59.999Z`);
const availableSessions = await Sessions.aggregate([
{
$match: {
startTime: { $lte: endOfDay },
endTime: { $gte: startOfDay },
status: "AVAILABLE",
}
}
]);
return res.status(200).send({message: 'Available Session', availableSessions})
})
// Book Available Sessions
SessionsRoutes.post('/:id/book', async(req: any, res) => {
const {id} = req.params;
const {userId} = req.body;
const existingSession = await Sessions.findOne({_id: id});
if(!existingSession) {
return res.status(400).send({message: 'Session does not exist.'})
}
if(existingSession.status !== 'AVAILABLE') {
return res.status(400).send({message: 'This session is not Available'});
}
const result = await Sessions.findByIdAndUpdate(
id,
{ status: "BOOKED", userId: userId },
{ new: true }
);
// console.log('re-------', result)
if(result?.status === 'BOOKED') {
return res.status(200).send({message: 'Session Booked', result})
} else {
return res.status(400).send({message: 'Error during Booking session.'})
}
})
// Update Available Sessions To Complete : User Id also needed to update
SessionsRoutes.patch('/:id/complete', async(req: any, res) => {
const {id} = req.params;
const {userId} = req.body;
const existingSession = await Sessions.findOne({_id: id, });
if(!existingSession) {
return res.status(400).send({message: 'Session does not exist.'})
}
if(existingSession.status !== 'BOOKED') {
return res.status(400).send({message: 'This session is not BOOKED'});
}
const result = await Sessions.findByIdAndUpdate(
id,
{ status: "COMPLETED", completedAt: Date.now() },
{ new: true }
);
// console.log('re-------', result)
if(result?.status === 'COMPLETED') {
return res.status(200).send({message: 'Session Marked Completed', result})
} else {
return res.status(400).send({message: 'Error during updating session.'})
}
})
// Get Sessions for User : With Seperation
SessionsRoutes.get('/:id/sessions', async(req,res) => {
let userId = new Types.ObjectId(req.params.id);
console.log('userId', userId)
const result = await Sessions.aggregate([
{
$match: {
userId: userId
}
},
{
$facet: {
upcomingSessions: [
{
$match: {
status: 'BOOKED'
}
}
],
completedSessions: [
{
$match: {
status: 'COMPLETED'
}
}
]
}
}
]);
res.status(200).json({
success: true,
data: result[0] ?? {
upcomingSessions: [],
completedSessions: []
}
});
})
export default SessionsRoutes;