diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..3a6be41 Binary files /dev/null and b/.DS_Store differ diff --git a/Controllers/RestaurantControllers.js b/Controllers/RestaurantControllers.js new file mode 100644 index 0000000..a8523a5 --- /dev/null +++ b/Controllers/RestaurantControllers.js @@ -0,0 +1,152 @@ +const Restaurant = require('../Modals/Schema/RestaurantSch'); +const { sendEmail } = require('../Helpers/mailer'); +const { hashPassword, comparePassword } = require('../Helpers/Hashing'); +const { generateToken } = require('../Helpers/JWT'); + +// Controller to render the registration page +exports.renderRegister = (req, res) => res.send('/register'); + +// Controller to render the login page +exports.renderLogin = (req, res) => res.send('/login'); + +// Controller to register a new restaurant +exports.registerRestaurant = async (req, res) => { + try { + const { name, email, password, country, city, address, phoneNumber, openingHours, menu } = req.body; + + // Check if the restaurant already exists + const existingRestaurant = await Restaurant.findOne({ email }); + if (existingRestaurant) { + return res.status(400).json({ message: 'Restaurant already exists' }); + } + + // Hash the password before saving + const hashedPassword = await hashPassword(password); + + // Create a new restaurant instance + const newRestaurant = new Restaurant({ name, email, password: hashedPassword, country, city, address, phoneNumber, openingHours, menu }); + + // Save the new restaurant + const result = await newRestaurant.save(); + + // Send registration email + sendEmail(newRestaurant.email, newRestaurant.name); + + // Send success response + res.status(200).send('Restaurant registration successful'); + } catch (error) { + console.error('Error registering restaurant:', error); + res.status(500).send('Server Error'); + } +}; + +// Controller to handle restaurant login +exports.restaurantLogin = async (req, res) => { + try { + const { email, password } = req.body; + + // Find the restaurant by email + const restaurant = await Restaurant.findOne({ email }); + if (!restaurant) { + return res.status(400).json({ message: 'Invalid Credentials' }); + } + + // Compare passwords + const isPasswordValid = await comparePassword(password, restaurant.password); + if (!isPasswordValid) { + return res.status(400).json({ message: 'Incorrect Password' }); + } + + // Generate JWT token + const token = await generateToken({ restaurant }); + + // Send success response with token + res.status(200).cookie('tokenAuth', token).json({ message: 'Restaurant logged successfully', token }); + } catch (error) { + console.error('Error logging in restaurant:', error); + res.status(500).json({ message: 'Server Error' }); + } +}; + +// Controller to get restaurant profile by ID +exports.getRestaurantProfile = async (req, res) => { + try { + const ownerId = req.params.id; + + // Find the restaurant by ID + const restaurantProfile = await Restaurant.findById(ownerId); + if (!restaurantProfile) { + return res.status(404).json({ error: 'Restaurant owner profile not found' }); + } + + // Send restaurant profile + res.status(200).json(restaurantProfile); + } catch (error) { + console.error('Error getting restaurant owner profile:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +}; + +// Controller to update restaurant profile by ID +exports.updateRestaurantProfile = async (req, res) => { + try { + const ownerId = req.params.id; + + // Find the existing restaurant + const existingOwner = await Restaurant.findById(ownerId); + if (!existingOwner) { + return res.status(404).json({ error: 'Restaurant owner not found' }); + } + + // Prepare updated data + const updatedData = { + name: req.body.name || existingOwner.name, + email: req.body.email || existingOwner.email, + country: req.body.country || existingOwner.country, + city: req.body.city || existingOwner.city, + address: req.body.address || existingOwner.address, + phoneNumber: req.body.phoneNumber || existingOwner.phoneNumber, + openingHours: req.body.openingHours || existingOwner.openingHours, + }; + + // Check if a new password is provided + if (req.body.password) { + const passwordMatch = await bcrypt.compare(req.body.password, existingOwner.password); + if (!passwordMatch) { + updatedData.password = await bcrypt.hash(req.body.password, 10); + } + } + + // Update menu items if provided in the request + if (req.body.menu) { + updatedData.menu = req.body.menu; + } + + // Update the restaurant + const updatedOwner = await Restaurant.findByIdAndUpdate(ownerId, updatedData, { new: true }); + + // Send success response + res.status(200).json({ message: 'Restaurant owner profile updated successfully', owner: updatedOwner }); + } catch (error) { + console.error('Error updating restaurant owner profile:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +}; + +// Controller to delete restaurant profile by ID +exports.deleteRestaurantProfile = async (req, res) => { + try { + const ownerId = req.params.id; + + // Delete the restaurant by ID + const deletedOwner = await Restaurant.findByIdAndDelete(ownerId); + if (deletedOwner) { + return res.status(200).json({ message: 'Restaurant owner profile deleted successfully' }); + } else { + return res.status(404).json({ error: 'Restaurant owner not found' }); + } + } catch (error) { + console.error('Error during profile deletion:', error); + res.status(500).json({ error: 'Internal Server Error' }); + } +}; diff --git a/Controllers/UserControllers.js b/Controllers/UserControllers.js new file mode 100644 index 0000000..163677e --- /dev/null +++ b/Controllers/UserControllers.js @@ -0,0 +1,58 @@ +const User = require('../Modals/Schema/UserSch') +const {sendEmail} = require('../Helpers/mailer') +const {hashPassword,comparePassword} = require('../Helpers/Hashing') +const {generateToken} = require('../Helpers/JWT') + +exports.renderRegister = (req,res) => { + res.send('/register') +} + +exports.renderLogin = (req,res) => { + res.send('/login') +} + +exports.registerUser = async (req,res) => { + try{ + const {email} = req.body; + const user = await User.findOne({email}); + if(user){ + return res.status(400).json({message: 'User already exists'}) + } + const {username,password,age,country,sex,phoneNumber,bio} = new User(req.body) + const hashedPassword = await hashPassword(password) + const newUser = new User({ + username, + email : email, + password : hashedPassword, + age , + country , + sex , + phoneNumber , + bio + }) + const result = await newUser.save() + sendEmail(newUser.email,newUser.username) + res.status(200).send('User registration successful') + }catch(error){ + console.log('error' , error) + res.status(500).send('Server Error'); + } +} + +exports.userLogin = async (req,res) => { + try{ + const {email,password} = req.body + const user = await User.findOne({email}) + if(!user){ + return res.status(400).json({message : 'Invalid Credentials'}) + } + + const checked =await comparePassword(password,user.password) + if(!checked) return res.status(400).json({message:"Incorrect Password"}) + + const token = await generateToken({user : user}) + res.status(200).cookie('tokenAuth',token).send('User logged successfuly') + }catch(error){ + console.log('error' , error) + } +} \ No newline at end of file diff --git a/Controllers/Controllers.js b/Controllers/deliveryControllers.js similarity index 100% rename from Controllers/Controllers.js rename to Controllers/deliveryControllers.js diff --git a/Controllers/restaurantController.js b/Controllers/restaurantController.js deleted file mode 100644 index 299fe03..0000000 --- a/Controllers/restaurantController.js +++ /dev/null @@ -1,83 +0,0 @@ -const Menu = require('../Modals/Schema/MenuSchema'); - - -exports.getAllMenus = async (req, res) => { - try { - const menus = await Menu.find(); - return res.json({ data: menus }); - } catch (err) { - console.error(err); - return res.status(500).json({ message: 'Server error' }); - } -} - -exports.getSingleMenu= async (req,res) => { - try { - const id = req.params.id; - const menu = await Menu.findById(id); - res.json({ - data: menu - }); - }catch (err) { - console.error(err); - res.status(500).json({ message: 'Server error' }); - } -} - - -exports.createMenu = async (req, res) => { - try { - const {filename} = req.file - const {name, description, price, category, variations, dietary, reviews } = req.body; - - const menu = new Menu({ - name, - description, - price, - category, - image : filename, - variations, - dietary, - reviews, - }); - const result = await menu.save(); - - return res.json({ data: result }); - } catch (err) { - console.error(err); - return res.status(500).json({ message: 'Server error' }); - } -} -exports.updateMenu = async (req, res) => { - try { - const id = req.params.id; - const { filename } = req.file; - const { name, description, price, category, variations, dietary, reviews } = req.body; - const updatedMenu = await Menu.findByIdAndUpdate(id, { - name, - description, - price, - category, - image: filename, - variations, - dietary, - reviews - }, { new: true }); - res.json({ data: updatedMenu }); - } catch (err) { - console.error(err); - res.status(500).json({ message: 'Server error' }); - } -} - -exports.deleteMenu = async (req, res) => { - try { - const id = req.params.id; - const deletedMenu = await Menu.deleteOne({ _id: id }); - res.json({ data: deletedMenu }); - } catch (err) { - console.error(err); - res.status(500).json({ message: 'Server error' }); - } -} - diff --git a/Helpers/Hashing.js b/Helpers/Hashing.js index e69de29..af3ecd2 100644 --- a/Helpers/Hashing.js +++ b/Helpers/Hashing.js @@ -0,0 +1,12 @@ +const bcrypt = require('bcrypt') + +class Hashing{ + async hashPassword(password,salt=10){ + return await bcrypt.hash(password,salt); + } + async comparePassword(password,hashedPassword){ + return await bcrypt.compare(password,hashedPassword); + } +} + +module.exports = new Hashing \ No newline at end of file diff --git a/Helpers/JWT.js b/Helpers/JWT.js index e69de29..6e1a7b3 100644 --- a/Helpers/JWT.js +++ b/Helpers/JWT.js @@ -0,0 +1,9 @@ +const jwt = require('jsonwebtoken'); + +exports.generateToken = async (data)=>{ + return jwt.sign(data, process.env.SECRETKEY, {expiresIn: '1h'}) +} + +exports.verifyToken = (token)=>{ + return jwt.verify(token, process.env.SECRETKEY) +} \ No newline at end of file diff --git a/Helpers/mailer.js b/Helpers/mailer.js new file mode 100644 index 0000000..70b34ee --- /dev/null +++ b/Helpers/mailer.js @@ -0,0 +1,30 @@ +const nodemailer = require('nodemailer') +require('dotenv').config() + +exports.sendEmail = async (mail,username) => { + const transporter = nodemailer.createTransport({ + service: "gmail", + auth: { + user: process.env.EMAIL, + pass: process.env.PASSWORD + } + }); + + const mailOptions = { + from: process.env.EMAIL, + to: mail, + subject: "Welcome To our platform", + html : `
Thank you for registering
` + }; + + transporter.sendMail(mailOptions, function(error, info) { + if (error) { + console.log(error); + res.send('Error'); + } else { + console.log("Email sent: " + info.response); + res.send("Success"); + } + }); +} + \ No newline at end of file diff --git a/Middlwares/multer.js b/Middlwares/multer.js index 78bdd2a..e69de29 100644 --- a/Middlwares/multer.js +++ b/Middlwares/multer.js @@ -1,12 +0,0 @@ -const multer = require('multer') -const storage = multer.diskStorage ({ - destination : (req, file, cb) => { - cb(null, './public/Images') - }, - filename : (req, file , cb) => { - cb(null, Date.now() + '-' + file.originalname) - } -}) - -const upload = multer({storage}) -module.exports = upload.single('image') \ No newline at end of file diff --git a/Middlwares/sanitize.js b/Middlwares/sanitize.js index e69de29..720725a 100644 --- a/Middlwares/sanitize.js +++ b/Middlwares/sanitize.js @@ -0,0 +1,10 @@ +const xss = require("xss") +exports.Sanitize = (req, res, next) => { + const fields = ['username','email','age','country','sex','phoneNumber','bio'] + for(i in fields) { + if(req.body[fields[i]]) { + req.body[fields[i]] = xss(req.body[fields[i]]) + } + } + next() +} \ No newline at end of file diff --git a/Middlwares/validate.js b/Middlwares/validate.js index e69de29..81e528e 100644 --- a/Middlwares/validate.js +++ b/Middlwares/validate.js @@ -0,0 +1,53 @@ +const {body,validationResult} = require('express-validator') + +exports.Validate = [ + // username + body('username') + .notEmpty() + .withMessage('username is required') + .isLength({min:3}) + .withMessage('username must be at least 3 characters long'), + // email + body('email') + .notEmpty() + .withMessage('email is required') + .isLength({min:5}) + .withMessage('email must be at least 5 characters long'), + // age + body('age') + .notEmpty() + .withMessage('age is required') + .isNumeric() + .withMessage('age must be a boolean'), + //country + body('country') + .notEmpty() + .withMessage('country is required') + .isLength({min:3}) + .withMessage('country must be at least 3 characters long'), + //sex + body('sex') + .notEmpty() + .withMessage('sex is required') + .isLength({min:3}) + .withMessage('sex must be at least 3 characters long'), + //phoneNumber + body('phoneNumber') + .notEmpty() + .withMessage('phoneNumber is required') + .isNumeric() + .withMessage('phoneNumber must be at least 3 characters long'), + //bio + body('bio') + .notEmpty() + .withMessage('bio is required') + .isLength({min:5}) + .withMessage('bio must be at least 5 characters long'), + (req,res,next) => { + const errors = validationResult(req) + if(!errors.isEmpty()) { + return res.status(400).json({errors: errors.array()}) + } + next() + } +] \ No newline at end of file diff --git a/Modals/Schema/MenuSchema.js b/Modals/Schema/MenuSchema.js deleted file mode 100644 index f17a7b4..0000000 --- a/Modals/Schema/MenuSchema.js +++ /dev/null @@ -1,74 +0,0 @@ -const mongoose = require('mongoose'); - -const dietarySchema = new mongoose.Schema({ - type: { - type: String, - enum: ['Vegan', 'Vegetarian', 'Gluten-Free', 'Nut-Free', 'Dairy-Free', 'No Soy'], - }, -}); - -const reviewSchema = new mongoose.Schema({ - name: { - type: String, - required: true, - }, - rating: { - type: Number, - min: 1, - max: 5, - required: true, - }, - comment: { - type: String, - required: true, - }, - date: { - type: Date, - default: Date.now, - }, -}); - -const variationSchema = new mongoose.Schema({ - size: { - type: String, - required: true, - }, - price: { - type: Number, - required: true, - min: 0, - }, -}); - -const menuSchema = new mongoose.Schema({ - name: { - type: String, - required: true, - }, - description: { - type: String, - required: true, - }, - price: { - type: Number, - required: true, - min: 0, - }, - category: { - type: String, - required: true, - enum: ['Appetizer', 'Main Course', 'Dessert', 'Beverage'], - }, - image : { - type: String, - required: true - }, - variations: [variationSchema], - dietary: [dietarySchema], - reviews: [reviewSchema], -}); - -// Add indexes for frequently queried fields -menuSchema.index({ category: 1 }); - -module.exports = mongoose.model('Menu', menuSchema); diff --git a/Modals/Schema/RestaurantSch.js b/Modals/Schema/RestaurantSch.js index e69de29..efc5b8e 100644 --- a/Modals/Schema/RestaurantSch.js +++ b/Modals/Schema/RestaurantSch.js @@ -0,0 +1,60 @@ +const mongoose = require('mongoose'); + +const restaurantSchema = new mongoose.Schema({ + name: { + type: String, + required: true + }, + email: { + type: String, + required: true, + unique: true + }, + password: { + type: String, + required: true + }, + country: { + type: String, + required: true + }, + city: { + type: String, + required: true + }, + address: { + type: String, + required: true + }, + phoneNumber: { + type: Number, + required: true + }, + openingHours: { + type: Map, + of: { + type: String + }, + required: true + }, + menu: [{ + name: { + type: String, + required: true + }, + price: { + type: Number, + required: true + }, + category: { + type: String, + required: true + } + }], + createdAt: { + type: Date, + default: Date.now + } +}); + +module.exports = mongoose.model('Restaurant', restaurantSchema); diff --git a/Modals/Schema/UserSch.js b/Modals/Schema/UserSch.js index e69de29..f978810 100644 --- a/Modals/Schema/UserSch.js +++ b/Modals/Schema/UserSch.js @@ -0,0 +1,38 @@ +const mongoose = require('mongoose') + +const User = mongoose.Schema({ + username : { + type : 'string' , + required : true + }, + email : { + type: 'string' , + required : true + }, + password : { + type : 'string' , + required : true + }, + age : { + type: 'Number' + }, + country : { + type: 'String' + }, + sex : { + type: 'String' , + enum: ['male', 'female'] + }, + phoneNumber : { + type: 'Number' + }, + bio : { + type: 'String' + }, + createdAt: { + type: Date, + default: Date.now + } +}) + +module.exports = mongoose.model('users',User) \ No newline at end of file diff --git a/README.md b/README.md index 2fd5a59..477e6e0 100644 Binary files a/README.md and b/README.md differ diff --git a/Routes/RestaurantRoute.js b/Routes/RestaurantRoute.js deleted file mode 100644 index 1614984..0000000 --- a/Routes/RestaurantRoute.js +++ /dev/null @@ -1,17 +0,0 @@ -const express = require('express') -const router = express.Router() - -const upload = require('../Middlwares/multer') -const {getAllMenus,getSingleMenu,createMenu,updateMenu,deleteMenu}=require('../Controllers/restaurantController') - - - -router.route('/menu') -.get(getAllMenus) -.post(upload,createMenu) -router.route('/menu/:id') -.get(getSingleMenu) -.patch(upload,updateMenu) -.delete(deleteMenu) - -module.exports = router \ No newline at end of file diff --git a/Routes/RestaurantRoutes.js b/Routes/RestaurantRoutes.js new file mode 100644 index 0000000..124544e --- /dev/null +++ b/Routes/RestaurantRoutes.js @@ -0,0 +1,31 @@ +const express = require('express'); +const { getRestaurantProfile, + renderRegister, + registerRestaurant, + renderLogin, + restaurantLogin, + updateRestaurantProfile, deleteRestaurantProfile } = require('../Controllers/RestaurantControllers'); +const { Sanitize } = require('../Middlwares/sanitize'); +const { Validate } = require('../Middlwares/validate'); +const routes = express.Router(); + +// Registration +routes.route('/register') + .get(renderRegister) + .post(registerRestaurant); + +// Login +routes.route('/login') + .get(renderLogin) + .post(restaurantLogin); + +// Profile +routes.get('/profile/:id', getRestaurantProfile); + +// Update Profile +routes.put('/profile/edit/:id', updateRestaurantProfile); + +// Delete Profile +routes.delete('/profile/edit/:id', deleteRestaurantProfile); + +module.exports = routes; diff --git a/Routes/userRoutes.js b/Routes/userRoutes.js new file mode 100644 index 0000000..b33c95c --- /dev/null +++ b/Routes/userRoutes.js @@ -0,0 +1,21 @@ +const express = require('express') +const {renderRegister, + registerUser, + renderLogin, + userLogin} + = require('../Controllers/UserControllers') +const {Sanitize} = require('../Middlwares/sanitize') +const {Validate} = require('../Middlwares/validate') +const routes = express.Router() + +//Registration +routes.route('/register') +.get(renderRegister) +.post(Sanitize,Validate,registerUser) + +//Login +routes.route('/login') +.get(renderLogin) +.post(userLogin) + +module.exports = routes \ No newline at end of file diff --git a/arkx.js b/arkx.js deleted file mode 100644 index e69de29..0000000 diff --git a/config/config.js b/config/config.js index bf56c82..e69de29 100644 --- a/config/config.js +++ b/config/config.js @@ -1,24 +0,0 @@ -module.exports = { - server: { - // Configuration for the server - PORT: process.env.PORT || 3000, - DefaultViewEngine:'jade' ,// Define the port number for your server - }, - database: { - // Configuration for the database - uri: process.env.MONGO_URI, // URI for connecting to your MongoDB database - options: { - timestamps: true, // Enable automatic timestamps (createdAt and updatedAt) - versionKey: false, // Disable version key (e.g., __v) - useNewUrlParser: true, // Use the new URL parser for MongoDB - }, - }, - color: { - // Define color codes for console output - green: "\x1b[32m", // Green color - red: "\x1b[31m", // Red color - }, - notFoundTemplate: 404, // A template or value for "not found" responses - jwtSecretKey: process.env.JWT_SECRET_KEY || 'testsecret', // Secret key for JWT authentication - }; - \ No newline at end of file diff --git a/config/database.js b/config/database.js index abd5302..29ea21b 100644 --- a/config/database.js +++ b/config/database.js @@ -1,46 +1,27 @@ -const { color, database } = require('./config'); // Import configuration settings -const mongoose = require('mongoose'); - -exports.connection = () => { - function connectToMongo() { - // Attempt to connect to the MongoDB database - mongoose.connect(database.uri).then( - () => { - // Connection successful - }, - (err) => { - // Connection error - console.info(color.red, 'Mongodb error', err); - } - ).catch((err) => { - console.log(color.red, 'ERROR:', err); - }); - } - - mongoose.connection.on('connected', () => { - // Event: Connected to MongoDB - console.info(color.green, 'Connected to MongoDB ✓'); - - }); - - mongoose.connection.on('reconnected', () => { - // Event: MongoDB reconnected - console.info('MongoDB reconnected!'); - }); - - mongoose.connection.on('error', (error) => { - // Event: Error in MongoDB connection - console.error(color.red, `Error in MongoDB connection: ${error}`); - mongoose.disconnect(); - }); - - mongoose.connection.on('disconnected', () => { - // Event: MongoDB disconnected - console.error(color.red, `MongoDB disconnected! Reconnecting in ${2000 / 1000}s...`); - setTimeout(() => connectToMongo(), 2000); - }); - - return { - connectToMongo, - }; -}; \ No newline at end of file +const mongoose = require('mongoose') + +exports.connection = () => { + function connectToMongo(){ + mongoose.connect('mongodb+srv://77anwarrr:benmolay@cluster0.yjfttsq.mongodb.net/') + .then(() => console.log('Connected to MongoDB Atlas')) + .catch(err => console.error('Error connecting to MongoDB Atlas', err)); + } + + mongoose.connection.on('connected', () => { + console.log('Mongoose connected to MongoDB Atlas'); + }); + + mongoose.connection.on('error', (err) => { + console.error('Mongoose connection error:', err); + }); + + mongoose.connection.on('disconnected', () => { + console.log('Mongoose disconnected from MongoDB Atlas'); + }); + + return{ + connectToMongo, + } +} + +//M6QL7ZgULnEjtWRm \ No newline at end of file diff --git a/Routes/UserRoute.js b/example.js similarity index 100% rename from Routes/UserRoute.js rename to example.js diff --git a/package.json b/package.json index bf6039d..b34ac67 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,25 @@ -{ - "name": "foody", - "version": "1.0.0", - "description": "🍽️ Foody: Triple Registry Triple Login Website Introduction", - "main": "arkx.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "node server.js" - }, - "author": "othmane errouissat", - "license": "ISC", - "dependencies": { - "bcrypt": "^5.1.1", - "cookie-parser": "^1.4.6", - "dotenv": "^16.4.5", - "emailjs": "^4.0.3", - "express": "^4.19.2", - "express-session": "^1.18.0", - "express-validator": "^7.0.1", - "helmet": "^7.1.0", - "jsonwebtoken": "^9.0.2", - "mongoose": "^8.2.3", - "multer": "^1.4.5-lts.1", - "nodemailer": "^6.9.13", - "validator": "^13.11.0", - "xss": "^1.0.15" - }, - "devDependencies": { - "nodemon": "^3.1.0" - } -} +{ + "name": "foody", + "version": "1.0.0", + "description": "🍽️ Foody: Triple Registry Triple Login Website\r Introduction", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "express": "^4.19.1", + "express-validator": "^7.0.1", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.2.3", + "nodemailer": "^6.9.13", + "xss": "^1.0.15" + }, + "devDependencies": { + "nodemon": "^3.1.0" + } +} diff --git a/server.js b/server.js index 1b2439a..94cc09a 100644 --- a/server.js +++ b/server.js @@ -1,31 +1,36 @@ -require('dotenv').config() - -const {server} = require('./config/config'); -const PORT = server.PORT - -const express = require('express') -const app = express() - -const resturant = require('./Routes/RestaurantRoute') -const cookieParser = require('cookie-parser') - -//Import the database connection function -const {connection} = require('./config/database') -const database = connection() - -//Middleware setup -app.use(cookieParser()) -app.use(express.json()) -app.use(express.urlencoded({extended : true})) - -//Connect to the MongoDb databse -database.connectToMongo() - -const {default : mongoose} = require('mongoose') - -app.use('/restaurant',resturant) - -// Start the Express server and listen on port 3000 -app.listen(PORT, () => { - console.log(`Listening on port ${PORT}`); -}); \ No newline at end of file +require('dotenv').config(); + +const express = require('express'); +const app = express(); +const PORT = process.env.PORT || 3000; // Set default port to 3000 if PORT environment variable is not defined + +// Import the database connection function +const { connection } = require('./config/database'); +const database = connection(); + +// Middleware setup +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +// Connect to the MongoDB database +database.connectToMongo(); + +// Import routes +const restaurantRoutes = require('./Routes/RestaurantRoutes'); +const userRoutes = require('./routes/userRoutes'); // Corrected file path casing + +// Use routes +app.use('/restaurant', restaurantRoutes); +app.use('/client', userRoutes); + +// Error handling middleware +app.use((err, req, res, next) => { + // Handle errors and respond accordingly + console.error(err); + res.status(500).json({ error: 'Internal Server Error' }); // Generic error response for demonstration +}); + +// Start the Express server and listen on the specified port +app.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +});