Skip to content
Open
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
70 changes: 70 additions & 0 deletions api/controllers/ToDoController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import Seat from "../models/rsmodel.js";

export const viewSeatMap = async (req, res) => {
try {
const view = await Seat.find();
res.send(view);
} catch (err) {
console.error("Error viewing SeatMap:", err);
res.status(500).json({ error: 'Internal Server Error' });
}
};

export const reserve = async (req, res) => {
try {
const { seat } = req.body;
const seatDoc = await Seat.findOne({ seat });

if (!seatDoc) {
return res.status(404).json({ error: 'Seat not found' });
}

if (seatDoc.availability === 'reserved') {
return res.status(400).json({ error: 'Seat is already reserved' });
}

seatDoc.availability = 'reserved';
await seatDoc.save();

res.json({ message: `Seat ${seat} reserved successfully` });
} catch (err) {
console.error("Error reserving seat:", err);
res.status(500).json({ error: 'Internal Server Error' });
}
};

export const cancel = async (req, res) => {
try {
const { seat } = req.body;
const seatDoc = await Seat.findOne({ seat });

if (!seatDoc) {
return res.status(404).json({ error: 'Seat not found' });
}

if (seatDoc.availability === 'available') {
return res.status(400).json({ error: 'Seat is already available' });
}

seatDoc.availability = 'available';
await seatDoc.save();

res.json({ message: `Seat ${seat} reservation canceled successfully` });
} catch (err) {
console.error("Error canceling seat reservation:", err);
res.status(500).json({ error: 'Internal Server Error' });
}
};

// export const deleteToDo = (req, res) => {
// const { id } = req.params;

// Seat.findByIdAndDelete(id)
// .then(() => {
// res.send("Deleted Successfully....");
// })
// .catch((err) => {
// console.error("Error deleting ToDo:", err);
// res.status(500).json({ error: err, msg: "Something went wrong!" });
// });
// };
99 changes: 98 additions & 1 deletion api/controllers/auth.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ import User from '../models/user.model.js';
import bcryptjs from 'bcryptjs';
import { errorHandler } from '../utils/error.js';
import jwt from 'jsonwebtoken';
// Import and load dotenv
import dotenv from 'dotenv';
dotenv.config();

const jwtSecretKey = process.env.JWT_SECRET;
console.log(jwtSecretKey, "jwt secret key");



export const signup = async (req, res, next) => {
const { username, email, password } = req.body;
Expand All @@ -22,7 +30,7 @@ export const signin = async (req, res, next) => {
if (!validUser) return next(errorHandler(404, 'User not found'));
const validPassword = bcryptjs.compareSync(password, validUser.password);
if (!validPassword) return next(errorHandler(401, 'wrong credentials'));
const token = jwt.sign({ id: validUser._id }, process.env.JWT_SECRET);
const token = jwt.sign({ id: validUser._id }, jwtSecretKey);
const { password: hashedPassword, ...rest } = validUser._doc;
const expiryDate = new Date(Date.now() + 3600000); // 1 hour
res
Expand Down Expand Up @@ -78,6 +86,95 @@ export const google = async (req, res, next) => {
}
};


export const signout = (req, res) => {
res.clearCookie('access_token').status(200).json('Signout success!');
};



import { verifyEmailOtpToken, signEmailOTpToken } from '../utils/verifyUser.js';
import nodemailer from "nodemailer";
import Userverify from '../models/OtpModel.js';
// Your code here


export const sendNotMail = async (req,res) => {
const {email} = req.body
const otp = Math.floor(100000 + Math.random() * 900000);
try {
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: "jambhulkarrishabh@gmail.com", // Replace with your Gmail email address
pass: "hitxyoywsfafizqf", // Replace with your Gmail password (or use an app password)
},
});

// Email options
const mailOptions = {
from: "jambhulkarrishabh@gmail.com", // Replace with your Gmail email address
to: email,
subject: "subject",
html: `<h1> Congratulations you successfully sent email. OTP : ${otp} </h1>`

};


transporter.sendMail(mailOptions, async (error, info) => {
if (error) {
res.status(500).send("Internal Server Error");
} else {
const userFind = await Userverify.findOne({ email });
const otpToken = await signEmailOTpToken({ otp: otp.toString() });
if (userFind) {
await Userverify.updateOne(
{ email },
{ $set: { verifyToken: otpToken } }
);
} else {
await Userverify.create({ email, verifyToken: otpToken });
}
res.status(200).send("Email sent successfully");
}
});
} catch (err) {
console.log(err);
}
};

export async function verify_otp(req, res, next) {

try {
const { email } = req.body;
console.log(req.body);
const EmailToken = await Userverify.findOne({ email: email });
if (EmailToken) {
const { otp } = await verifyEmailOtpToken(EmailToken.verifyToken);
console.log(otp, req.body.otp);
if (req.body.otp == otp) {
return res.status(200).json({ message: "OTP is Success" });
} else {
return res.status(404).json({ message: "Entered OTP is wrong" });
}
} else {
return res.status(404).json({ message: "Please request a Otp" });
}
} catch (err) {
return res.status(404).json({ message: err });
}
};

// Send email
// transporter.sendMail(mailOptions, async (error, info) => {
// if (error) {
// console.log(error, "Internal Server Error");
// } else {
// console.log("Email sent:" + info.response);
// console.log("Email sent successfully");
// }
// });
// } catch (err) {
// console.log(err);
// }
// }
7 changes: 3 additions & 4 deletions api/controllers/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ export const test = (req, res) => {
};

// update user

export const updateUser = async (req, res, next) => {
if (req.user.id !== req.params.id) {
return next(errorHandler(401, 'You can update only your account!'));
Expand All @@ -19,6 +18,7 @@ export const updateUser = async (req, res, next) => {
req.body.password = bcryptjs.hashSync(req.body.password, 10);
}


const updatedUser = await User.findByIdAndUpdate(
req.params.id,
{
Expand All @@ -39,9 +39,8 @@ export const updateUser = async (req, res, next) => {
};


// delete user


// delete user
export const deleteUser = async (req, res, next) => {
if (req.user.id !== req.params.id) {
return next(errorHandler(401, 'You can delete only your account!'));
Expand All @@ -53,4 +52,4 @@ export const deleteUser = async (req, res, next) => {
next(error);
}

}
}
40 changes: 31 additions & 9 deletions api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,47 @@ import userRoutes from './routes/user.route.js';
import authRoutes from './routes/auth.route.js';
import cookieParser from 'cookie-parser';
import path from 'path';
dotenv.config();
import bookroutes from './routes/ToDoRoutes.js';
// dotenv.config();
// import seatData from "file:///C:/Users/jambh/Desktop/MERN/loginapp/mern-auth/api/seatData.json" assert { type: "json" };
// import Seat from './models/rsmodel.js';

// DB1
mongoose
.connect(process.env.MONGO)
.connect("mongodb://localhost:27017/mern-auth")
.then(() => {
console.log('Connected to MongoDB');
})
console.log('Connected to DB1');
// JSON data representing seat information


// Create instances of Seat model using the JSON data
// Seat.insertMany(seatData)
// .then((docs) => {
// console.log(`${docs.length} seats added to the database`);
// mongoose.disconnect(); // Close the connection after adding data
// })
// .catch((err) => {
// console.error("Error adding seats:", err);
// mongoose.disconnect(); // Close the connection in case of error
// });
})
.catch((err) => {
console.log(err);
});

const __dirname = path.resolve();




// const __dirname = path.resolve();

const app = express();

app.use(express.static(path.join(__dirname, '/client/dist')));
// app.use(express.static(path.join(__dirname, '/client/dist')));

app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'client', 'dist', 'index.html'));
});
// app.get('*', (req, res) => {
// res.sendFile(path.join(__dirname, 'client', 'dist', 'index.html'));
// });

app.use(express.json());

Expand All @@ -36,6 +57,7 @@ app.listen(3000, () => {

app.use('/api/user', userRoutes);
app.use('/api/auth', authRoutes);
app.use("/api", bookroutes);

app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500;
Expand Down
20 changes: 20 additions & 0 deletions api/models/OtpModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import mongoose from 'mongoose';

const userVerifySchema = new mongoose.Schema({
email: {
type: String,
required: true,
unique: true
},
verifyToken: {
type: String,
required: true,
unique: true
}
}, {
timestamps: true // This adds 'createdAt' and 'updatedAt' fields
});

const Userverify = mongoose.model('Userverify', userVerifySchema);

export default Userverify; // Exporting the Userverify model
19 changes: 19 additions & 0 deletions api/models/rsmodel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import mongoose from 'mongoose';

// Define the schema
const seatSchema = new mongoose.Schema({
seat: {
type: Number,

},
availability: {
type: String,
enum: ['available', 'reserved'],
default: 'available'
}
});

// Create the model
const Seat = mongoose.model('Seat', seatSchema);

export default Seat;
16 changes: 16 additions & 0 deletions api/routes/ToDoRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Router } from "express";
import {
viewSeatMap,
reserve,
cancel
} from "../controllers/ToDoController.js";

const router = Router();

router.get("/book", viewSeatMap);
router.post("/book/reserve", reserve);
router.post("/book/cancel", cancel);
// router.put("/update/:id", updateToDo);
// router.delete("/delete/:id", deleteToDo);

export default router;
7 changes: 5 additions & 2 deletions api/routes/auth.route.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import express from 'express';
import { signin, signup, google, signout } from '../controllers/auth.controller.js';

import { signin, signup, google, signout, sendNotMail, verify_otp} from '../controllers/auth.controller.js';


const router = express.Router();

router.post('/signup', signup);
router.post('/signin', signin);
router.post('/google', google);
router.get('/signout', signout);

router.post('/sendmail', sendNotMail);
router.post('/verifyOtp', verify_otp);
export default router;
Loading