diff --git a/src/controllers/admincontroller.js b/src/controllers/admincontroller.js index c389ef56..fedd079c 100644 --- a/src/controllers/admincontroller.js +++ b/src/controllers/admincontroller.js @@ -8,14 +8,30 @@ const fastify = require("fastify"); const { Tank, MotorData, IotData } = require('../models/tanks') const JWT_SECRET = 'your-secret-key'; -async function generateCustomerId() { +async function generateCustomerId(role) { let customerId; let isUnique = false; + let prefix; + + // Set the prefix based on the role + switch (role) { + case 'admin': + prefix = 'AWSAD'; + break; + case 'sales': + prefix = 'AWSSL'; + break; + case 'store': + prefix = 'AWSST'; + break; + default: + throw new Error('Invalid role for customer ID generation'); + } while (!isUnique) { // Generate a random number or string for the customer ID - customerId = Math.floor(1000 + Math.random() * 9000).toString(); // Generates a random number between 1000 and 9999 - + const randomId = Math.floor(1000 + Math.random() * 9000).toString(); // Generates a random number between 1000 and 9999 + customerId = `${prefix}${randomId}`; // Check for uniqueness in the Admin collection const existingAdmin = await Admin.findOne({ customerId }); if (!existingAdmin) { @@ -26,146 +42,6 @@ async function generateCustomerId() { return customerId; } -// exports.adminSignUp = async (request, reply) => { - -// try { -// const { email, password } = request.body - -// // Check if an admin with the same email address already exists -// const existingAdmin = await Admin.findOne({ email }) - -// if (existingAdmin) { -// return reply.status(400).send({ message: 'Email already registered' }) -// } - -// // Hash the password using bcrypt -// const hashedPassword = await bcrypt.hash(password, 10) - -// // Create a new admin object with the hashed password -// const admin = new Admin({ email, password: hashedPassword }) - -// // Save the new admin to the database -// await admin.save() - -// // Generate a JWT token for the new admin -// // const token = jwt.sign({ email: admin.email }, 'secret') - -// // // Return the token to the client -// // return { token } -// reply.send({message : "Admin Account Created Sucessfully"}) -// } catch (err) { -// reply.status(500).send({ message: err.message }) -// } -// } - -// exports.adminSignUp = async (request, reply) => { - -// try { -// const { email, password } = request.body - -// // Check if the email address is valid -// const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ -// if (!emailRegex.test(email)) { -// return reply.status(400).send({ message: 'Invalid email address' }) -// } - -// // Check if an admin with the same email address already exists -// const existingAdmin = await Admin.findOne({ email }) - -// if (existingAdmin) { -// return reply.status(400).send({ message: 'Email already registered' }) -// } - -// // Hash the password using bcrypt -// const hashedPassword = await bcrypt.hash(password, 10) - -// // Create a new admin object with the hashed password -// const admin = new Admin({ email, password: hashedPassword }) - -// // Save the new admin to the database -// await admin.save() - -// // Generate a JWT token for the new admin -// // const token = jwt.sign({ email: admin.email }, 'secret') - -// // // Return the token to the client -// // return { token } -// reply.send({message : "Admin Account Created Sucessfully"}) -// } catch (err) { -// reply.status(500).send({ message: err.message }) -// } -// } - - - -// exports.adminLogin = async (request, reply) => { -// try { -// const { email, password } = request.body - -// // Check if an admin with the email address exists -// const admin = await Admin.findOne({ email }) - -// if (!admin) { -// return reply.status(401).send({ message: 'Invalid email or password' }) -// } - -// // Compare the password entered by the user with the hashed password stored in the database -// const isPasswordValid = await bcrypt.compare(password, admin.password) - -// if (!isPasswordValid) { -// return reply.status(401).send({ message: 'Invalid email or password' }) -// } - -// // Generate a JWT token for the authenticated admin -// const token = jwt.sign({ email: admin.email }, 'secret') - -// // Return the token to the client -// return { token } -// } catch (err) { -// reply.status(500).send({ message: err.message }) -// } -// } - - -// Admin Sign-Up Function -// exports.adminSignUp = async (request, reply) => { -// try { -// const { phone,username, password } = request.body; - -// // Check if the email address is valid -// // const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; -// // if (!emailRegex.test(email)) { -// // return reply.status(400).send({ message: 'Invalid email address' }); -// // } -// if (!username || username.trim() === '') { -// return reply.status(400).send({ message: 'Username is required' }); -// } - - -// // Check if an admin with the same email address already exists -// const existingAdminUsername = await Admin.findOne({ username }); -// const existingAdmin = await Admin.findOne({ phone }); -// if (existingAdmin) { -// return reply.status(400).send({ message: 'phone already registered' }); -// } -// if (existingAdminUsername) { -// return reply.status(400).send({ message: 'Username already registered' }); -// } - -// // Hash the password using bcrypt -// const hashedPassword = await bcrypt.hash(password, 10); - -// // Create a new admin object with the hashed password -// const admin = new Admin({ phone,username, password: hashedPassword }); - -// // Save the new admin to the database -// await admin.save(); - -// reply.send({ message: 'Admin Account Created Successfully' }); -// } catch (err) { -// reply.status(500).send({ message: err.message }); -// } -// }; exports.adminSignUp = async (request, reply) => { try { @@ -176,29 +52,29 @@ exports.adminSignUp = async (request, reply) => { } // Validate role - if (!['admin', 'sales', 'store'].includes(role)) { + if (!role || !['admin', 'sales', 'store'].includes(role)) { return reply.status(400).send({ message: 'Invalid role. Must be either admin, sales, or store' }); } // Check if an admin with the same phone number or username already exists - const existingAdminUsername = await Admin.findOne({ username }); - const existingAdmin = await Admin.findOne({ phone }); + // const existingAdminUsername = await Admin.findOne({ username }); + // const existingAdmin = await Admin.findOne({ phone }); - if (existingAdmin) { - return reply.status(400).send({ message: 'Phone already registered' }); - } - if (existingAdminUsername) { - return reply.status(400).send({ message: 'Username already registered' }); - } + // if (existingAdmin) { + // return reply.status(400).send({ message: 'Phone already registered' }); + // } + // if (existingAdminUsername) { + // return reply.status(400).send({ message: 'Username already registered' }); + // } // Hash the password using bcrypt const hashedPassword = await bcrypt.hash(password, 10); - const c_id = await generateCustomerId(); // Assuming you have this function defined elsewhere - const building = 'ADMIN'; // You can customize this logic to derive from a parameter or a default value - const customerId = `AWSU${building}${c_id}`; // Construct the customer ID + const customerId = await generateCustomerId(role); // Assuming you have this function defined elsewhere + //const building = 'ADMIN'; // You can customize this logic to derive from a parameter or a default value + //const customerId = `AWSU${building}${c_id}`; // Construct the customer ID // Create a new admin object with the hashed password and role const admin = new Admin({ phone, username, password: hashedPassword, customerId, role }); @@ -241,33 +117,7 @@ exports.adminLogin = async (request, reply) => { } }; -// Sales and Store Login (Phone and Password) -// exports.salesStoreLogin = async (request, reply) => { -// try { -// const { phone, password } = request.body; - -// // Check if a user (sales or store) with the phone number exists -// const admin = await Admin.findOne({ phone }); - -// if (!admin) { -// return reply.status(401).send({ message: 'Invalid phone number or password' }); -// } - -// // Compare the password entered by the user with the hashed password stored in the database -// const isPasswordValid = await bcrypt.compare(password, admin.password); - -// if (!isPasswordValid) { -// return reply.status(401).send({ message: 'Invalid phone number or password' }); -// } -// // Generate a JWT token for the authenticated user (with role sales or store) -// const token = jwt.sign({ phone: admin.phone, role: admin.role }, JWT_SECRET, { expiresIn: '1h' }); - -// return reply.send({ token }); -// } catch (err) { -// reply.status(500).send({ message: err.message }); -// } -// }; exports.salesStoreLogin = async (request, reply) => { try { @@ -341,39 +191,7 @@ exports.getUserByCustomerId = async (request, reply) => { }; -// Create Sales/Store User (Admin Only) -// exports.createUser = async (request, reply) => { -// const { phone, password, role } = request.body; - -// // Validate role (only sales or store) -// if (!['sales', 'store'].includes(role)) { -// return reply.status(400).send({ message: 'Invalid role. Must be either sales or store' }); -// } - -// try { -// const existingUser = await Admin.findOne({ phone }); - -// if (existingUser) { -// return reply.status(400).send({ message: 'User with this phone number already exists' }); -// } - -// // Hash the password -// const hashedPassword = await bcrypt.hash(password, 10); - -// // Create the new user -// const newUser = new Admin({ -// phone, -// password: hashedPassword, -// role, -// }); - -// await newUser.save(); -// return reply.send({ message: 'User created successfully' }); -// } catch (err) { -// reply.status(500).send({ message: err.message }); -// } -// }; exports.createUser = async (request, reply) => { const { phone, password, role } = request.body; diff --git a/src/models/admin.js b/src/models/admin.js index 2a962f4c..c386110a 100644 --- a/src/models/admin.js +++ b/src/models/admin.js @@ -13,7 +13,7 @@ const adminSchema = new mongoose.Schema({ username: { type: String, required: true, - unique: true, + // unique: true, }, password: { type: String, diff --git a/src/routes/adminRoute.js b/src/routes/adminRoute.js index 54629f06..997cffde 100644 --- a/src/routes/adminRoute.js +++ b/src/routes/adminRoute.js @@ -3,31 +3,7 @@ const adminController = require('../controllers/admincontroller') module.exports = function (fastify, opts, next) { -// fastify.route({ -// method: "POST", -// url: "/api/adminSignup", -// schema: { -// tags: ["Admin"], -// description: "This is for cretae New Admin Account", -// summary: "This is for cretae New Admin Account", -// body: { -// type: "object", -// properties: { -// phone : { type: "string" }, -// password: { type: "string" }, -// username:{type:"string"}, -// }, -// }, -// security: [ -// { -// basicAuth: [], -// }, -// ], -// }, -// handler: adminController.adminSignUp, - -// }); fastify.route({ method: "POST",