You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1026 lines
30 KiB

// const fastify = require("fastify")({
// logger: true,
// });
//const axios = require('axios');
const bcrypt = require("bcrypt");
const saltRounds = 10;
const libphonenumberjs = require("libphonenumber-js");
// External Dependancies
// offers http-friendly error objects.
const boom = require("boom");
// Get Data Models
const { Supplier, generateSupplierId, FriendRequest,DeliveryBoy} = require("../models/supplier")
const { User,Counter, generateBookingId,resetCounter,generateCustomerId,ProfilePicture, AddTeamMembers} = require('../models/User')
//const User = require("../models/User");
const customJwtAuth = require("../customAuthJwt");
const fastify = require("fastify")({
logger: true,
});
//function to encrypt password.
//used bcrypt module.
async function bcryptPassword(password) {
encryptedPwd = bcrypt.hash(password, saltRounds);
return encryptedPwd;
}
//function to decrypt password return user object .
//used bcrypt module.
async function bcryptComparePassword(pwd, encpassword) {
isSame = bcrypt.compare(pwd, encpassword);
return isSame;
}
// Get current users
exports.getCurrentUser = async (req, reply) => {
try {
const users = await User.findOne({ customerId: req.body.customerId });
return users;
} catch (err) {
throw boom.boomify(err);
}
};
// Get all users
exports.getUsers = async (req, reply) => {
const limit = parseInt(req.query.limit) || 100;
const page = parseInt(req.query.page) || 1;
const startindex = (page - 1) * limit;
try {
await User.find()
.limit(limit)
.skip(startindex)
.exec()
.then((docs) => {
reply.send({ status_code: 200, data: docs, count: docs.length });
})
.catch((err) => {
console.log(err);
reply.send({ error: err });
});
} catch (err) {
throw boom.boomify(err);
}
};
// Get single user by ID
exports.getSingleUser = async (req, reply) => {
try {
const customerId = req.params.customerId;
const user = await User.findOne({ customerId: customerId });
return user;
} catch (err) {
throw boom.boomify(err);
}
};
// Edit user info by userId
exports.editUserInfo = async (req, body) => {
try {
const { userId } = req.params;
console.log(customerId)
const userInfo = await User.findById(userId);
const updateData = req.body;
console.log(updateData.firstName);
if (updateData.firstName) userInfo.profile.firstName = updateData.firstName;
if (updateData.lastName) userInfo.profile.lastName = updateData.lastName;
if (updateData.phone) userInfo.profile.contactNumber = updateData.phone;
if (updateData.address1) userInfo.profile.address1 = updateData.address1;
if (updateData.address2) userInfo.profile.address2 = updateData.address2;
if (updateData.city) userInfo.profile.city = updateData.city;
if (updateData.state) userInfo.profile.state = updateData.state;
if (updateData.country) userInfo.profile.country = updateData.country;
if (updateData.zip) userInfo.profile.zip = updateData.zip;
if (updateData.phone) userInfo.phone = updateData.phone;
if (updateData.email) userInfo.emails[0].email = updateData.email;
if (updateData.role) userInfo.profile.role = updateData.role;
const user = await userInfo.save();
return user;
} catch (err) {
throw boom.boomify(err);
}
};
exports.editCuurentUserInfo = async (req, reply) => {
try {
const { customerId } = req.params;
const userInfo = await User.findOne({ customerId: customerId.toString() });
const updateData = req.body;
if (updateData.buildingName) userInfo.buildingName = updateData.buildingName
if (updateData.firstName) userInfo.profile.firstName = updateData.firstName;
if (updateData.lastName) userInfo.profile.lastName = updateData.lastName;
if (updateData.username) userInfo.username = updateData.username;
if (updateData.phone) userInfo.profile.contactNumber = updateData.phone;
if (updateData.address1) userInfo.profile.address1 = updateData.address1;
if (updateData.address2) userInfo.profile.address2 = updateData.address2;
if (updateData.city) userInfo.profile.city = updateData.city;
if (updateData.state) userInfo.profile.state = updateData.state;
if (updateData.country) userInfo.profile.country = updateData.country;
if (updateData.zip) userInfo.profile.zip = updateData.zip;
if (updateData.phone) userInfo.phone = updateData.phone;
if (updateData.emails) userInfo.emails = updateData.emails;
console.log(userInfo.emails[0].email)
if (updateData.role) userInfo.profile.role = updateData.role;
if (updateData.phone) {
const phoneNumber = updateData.phone //libphonenumberjs.parsePhoneNumber(updateData.phone);
if (phoneNumber) {
// access returned collection
if (!phoneNumber) { //if (!phoneNumber.isValid()) {
error = {
armintatankdata: {
error: true,
code: 10002,
message:
"10002 - Phone # " +
updateData.phone +
" is not a valid phone number",
},
};
req.body.regError = error;
reply.status(406).send(error);
}
}
}
if (userInfo.phone == updateData.phone) {
console.log("IF++++++++++++++=");
userInfo.phone = updateData.phone;
userInfo.phoneVerified = true;
} else {
console.log("Ilse++++++++++++++=");
userInfo.phone = updateData.phone;
userInfo.phoneVerified = false;
}
const user = await userInfo.save();
return user;
} catch (err) {
throw boom.boomify(err);
}
};
// Add a new user
// Function accepts username, password , encrypts password and saves it in the database.
exports.addUser = async (req, reply) => {
try {
// await resetCounter();//to set customer id back to 0
var c_id = await generateCustomerId()
var building= ((req.body.buildingName).slice(0, 3)).toUpperCase();
var customer_id = `AWSU${building}${c_id}`
// console.log("This is the reply in the handler after the validations", reply);
userData = {
installationId:req.params.installationId,
customerId: customer_id,
username: req.body.username,
emails: req.body.emails,
password: req.body.password,
phone: req.body.phone,
buildingName: req.body.buildingName,
inchargeName: req.body.inchargeName,
profile: {
firstName: req.body.firstName,
lastName: req.body.lastName,
contactNumber: req.body.phone,
country: req.body.country,
state: req.body.state,
city: req.body.city,
address1: req.body.address1,
address2: req.body.address2,
zip: req.body.zip,
notes: req.body.notes,
},
longitude: req.body.longitude,
latitude:req.body.latitude,
fcmId: req.body.fcmId,
deviceId: req.body.deviceId
};
var user = new User(userData);
//password is not at the top level in the collection.
userpass = req.body.password;
// If fields are sent via form encoding , capture the fields and assign them to the user Object.
checkFormEncoding = isUserFormUrlEncoded(req);
if (checkFormEncoding.isUserFormUrlEncoded) {
usertobeInserted = checkFormEncoding.user;
console.log("thsi true url string");
user.installationId = usertobeInserted.installationId;
user.username = usertobeInserted.username;
user.firstName = usertobeInserted.firstName;
user.lastName = usertobeInserted.lastName;
user.phone = usertobeInserted.phone;
user.emails = usertobeInserted.emails;
user.passsword = usertobeInserted.password;
user.buildingName = usertobeInserted.buildingName;
user.inchargeName = usertobeInserted.inchargeName;
user.customerId = usertobeInserted.customer_id;
user.latitude = usertobeInserted.latitude;
user.longitude = usertobeInserted.longitude
user.fcmId = usertobeInserted.fcmId
user.deviceId = usertobeInserted.deviceId
}
console.log("---------checkurl ecnoded string-----------------------");
// Store hash in your password DB.
hash = await bcryptPassword(userpass);
if (hash) {
user.services.password.bcrypt = hash;
if (req.body.role) {
user.profile.role = req.body.role;
console.log("******************************************************");
console.log(user);
} else {
// override and make the user role as "user" by default
role = ["user"];
user.profile.role = role;
}
insertedUser = await user.save();
console.log(insertedUser);
if (insertedUser) {
// Prepare user object and wrap it inside the armintatankdata
var retUser = {
armintatankdata: {
username: insertedUser.username,
phone: insertedUser.phone,
customerId: insertedUser.customerId,
inchargeName: insertedUser.inchargeName,
buildingName: insertedUser.buildingName,
emails: [
{
email: insertedUser.emails[0].email,
},
],
profile: insertedUser.profile,
longitude: insertedUser.longitude,
latitude:insertedUser.latitude,
fcmId: insertedUser.fcmId,
deviceId: insertedUser.deviceId
},
status_code: 200,
};
return retUser;
}
}
} catch (err) {
throw boom.boomify(err);
}
};
// Login a user
// Accepts a user , password , and checks in the system to see if user exists , and password is valid
// returns a user object so that jwt token can be created and sent back to the client
exports.loginUser = async (req, fcmId, deviceId) => {
try {
const phone = req.body.phone;
const password = req.body.password;
const user = await User.findOne({ phone: phone });
if (user) {
const isSame = await bcryptComparePassword(
password,
user.services.password.bcrypt
);
if (isSame) {
// Optionally, you can save/update fcmId and deviceId here
user.fcmId = fcmId;
user.deviceId = deviceId;
await user.save();
return { same: true, user: user };
} else {
return { same: false };
}
} else {
return { same: false };
}
} catch (err) {
throw boom.boomify(err);
}
};
exports.loginUserWithOTP = async (req) => {
try {
const phone = req.body.phone;
const phoneVerificationCode = req.body.phoneVerificationCode;
const userDetails = await User.findOne({ phone: phone });
const supplier = await Supplier.findOne({phone: phone})
const deliveryBoy = await DeliveryBoy.findOne( { phone : phone})
const installation = await Install.findOne( { phone : phone})
let user;
if(userDetails){
user = await User.findOne({ phone: phone, 'phoneVerificationCode': phoneVerificationCode });
}
if(supplier){
user = await Supplier.findOne({ phone: phone, 'phoneVerificationCode': phoneVerificationCode });
}
if(deliveryBoy){
user = await DeliveryBoy.findOne({ phone: phone, 'phoneVerificationCode': phoneVerificationCode });
}
if(installation){
user = await Install.findOne({ phone: phone, 'phoneVerificationCode': phoneVerificationCode });
}
if (user) {
return { same: true, user: user };
} else {
return { same: false };
}
} catch (err) {
throw boom.boomify(err);
}
};
// Update an existing user
exports.updateUser = async (req, reply) => {
try {
const id = req.params.id;
const user = req.body;
const { ...updateData } = user;
const update = await User.findByIdAndUpdate(id, updateData, { new: true });
return update;
} catch (err) {
throw boom.boomify(err);
}
};
// Delete a user
exports.deleteUser = async (req, reply) => {
try {
const id = req.params.id;
const user = await User.findByIdAndRemove(id);
return user;
} catch (err) {
throw boom.boomify(err);
}
};
//Added the getphone user and delphone user apis for testing purposes
exports.getPhoneUser = async (req, reply) => {
try {
console.log(" requesting the api getPhoneUser , and passing the phone ");
const phone = req.body.phone;
const user = await User.findOne({ phone: phone });
return user;
} catch (err) {
throw boom.boomify(err);
}
};
exports.delPhoneUser = async (req, reply) => {
try {
const phone = req.body.phone;
console.log("deleting users wiht the phone ....", phone);
const user = await User.deleteOne({ phone: phone });
return user;
} catch (err) {
throw boom.boomify(err);
}
};
// exports.uploadProfilePicture = async (req, reply) => {
// try {
// const customerId = req.params.customerId;
// const picture = req.body.picture;
// let profilePicture = await ProfilePicture.findOne({ customerId });
// if (!profilePicture) {
// profilePicture = new ProfilePicture({
// customerId,
// picture,
// });
// } else {
// profilePicture. picture = picture;
// }
// await profilePicture.save();
// reply.send({ message: 'Profile picture uploaded successfully' });
// } catch (error) {
// reply.status(500).send({ error: error.message });
// }
// };
const multer = require('multer');
const fs = require('fs');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
if (!fs.existsSync(__dirname + '/temp')) {
fs.mkdirSync(__dirname + '/temp');
}
cb(null, './temp');
},
filename: function (req, file, cb) {
cb(null, file.originalname + '-' + Date.now() + '.' + file.mimetype.split('/')[1]);
}
});
const upload = multer({ storage: storage }).single('picture'); // Specify the field name used for the file upload
exports.uploadProfilePicture = async (req, reply) => {
try {
upload(req, reply, async (err) => {
if (err) {
reply.status(400).send({ error: 'Failed to upload profile picture' });
return;
}
const customerId = req.params.customerId;
const picturePath = req.file.path;
let profilePicture = await ProfilePicture.findOne({ customerId });
if (!profilePicture) {
profilePicture = new ProfilePicture({
customerId,
picture: fs.readFileSync(picturePath),
});
} else {
profilePicture.picture = fs.readFileSync(picturePath);
}
await profilePicture.save();
// Delete the temporary uploaded file
fs.unlinkSync(picturePath);
reply.send({ message: 'Profile picture uploaded successfully' });
});
} catch (error) {
reply.status(500).send({ error: error.message });
}
};
exports.logout = async (request, reply) => {
const invalidatedTokens = {};
const accessToken = request.headers.authorization && request.body.access_token;
invalidatedTokens[accessToken] = true;
reply.send({ message: 'Logout successful' })
}
// controller.js
const http = require('https');
const { Install } = require("../models/store");
exports.sendSms = async (request, reply) => {
const code = Math.floor(100000 + Math.random() * 900000);
const username = 'Arminta';
const apiKey = '2068323bea61494d315b';
const senderId = 'ARMNTA';
const mobile = request.body.mobileNumbers//'8341426949';
const message = `Welcome to Arminta !!! your OTP is ${code} please use it for login.`//`Welcome to Arminta !!! your OTP is ${code} please use it for login.`;
const user = await User.findOne({phone: mobile})
const supplier = await Supplier.findOne({phone: mobile})
const deliveryBoy = await DeliveryBoy.findOne( { phone : mobile})
const installation = await Install.findOne( { phone : mobile})
if(user){
await User.findOneAndUpdate({phone: mobile}, { $set: {'phoneVerificationCode': code } })
}
if(supplier){
await Supplier.findOneAndUpdate({phone: mobile}, { $set: {'phoneVerificationCode': code } })
}
if(deliveryBoy){
await DeliveryBoy.findOneAndUpdate({phone: mobile}, { $set: {'phoneVerificationCode': code } })
}
if(installation){
await Install.findOneAndUpdate({phone: mobile}, { $set: {'phoneVerificationCode': code } })
}
const apiUrl = `https://smslogin.co/v3/api.php?username=${username}&apikey=${apiKey}&senderid=${senderId}&mobile=${mobile}&message=${encodeURIComponent(message)}`;
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(apiUrl, options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
reply.send(data);
});
});
req.on('error', (error) => {
console.error(error);
reply.send({ error: 'Failed to send SMS' });
});
req.end();
}
exports.forgotPassword = async (req, reply) => {
try {
// Create a new User object from the request body
var user = new User(req.body);
// Check if the request body is URL encoded
checkFormEncoding = isUserFormUrlEncoded(req);
if (checkFormEncoding.isUserFormUrlEncoded) {
// Extract user information from the request body
usertobeInserted = checkFormEncoding.user;
user.username = usertobeInserted.username;
user.firstName = usertobeInserted.firstName;
user.lastName = usertobeInserted.lastName;
user.phone = usertobeInserted.phone;
user.emails = usertobeInserted.emails;
}
// Find a user with the given phone number in the database
userExists = await User.findOne({
phone: user.phone,
});
if (userExists) {
// Generate a random password reset code
const code = Math.floor(100000 + Math.random() * 900000);
// Convert the code to a string and hash it using bcrypt
codestr = "";
codestr = code.toString();
hash = await bcryptPassword(codestr);
// Update the user's password reset code and password hash in the database
const filter = {
phone: userExists.phone,
};
const update = {
$set: {
passwordResetCode: code,
"services.password.bcrypt": hash,
oneTimePasswordSetFlag: true,
},
};
const doc = await User.updateOne(filter, update);
// Find the updated user in the database
updatedUser = await User.findOne({ phone: userExists.phone });
if (updatedUser.oneTimePasswordSetFlag) {
// Send an SMS with the password reset code
const request = {
body: {
mobileNumbers: userExists.phone,
},
};
const response = {
send: (data) => {
console.log(data); // Optional: Log the response from the SMS provider
// Send a success response with the password reset code
req.body.passwordResetCode = code;
reply.send('{"armintatankdata":{"error":false,"forgotPassword": true}}');
},
};
await exports.sendSms(request, response);
} else {
// Send an error response if the password reset code was not set
error = {
armintatankdata: {
error: true,
code: 10007,
message: "10007 - Unable to reset password",
},
};
req.body.regError = error;
reply.send(error);
}
} else {
// Send an error response if no user was found with the given phone number
error = {
armintatankdata: {
error: true,
code: 10006,
message: "10006 - Please check the phone number you entered..",
},
};
req.body.regError = error;
reply.send(error);
}
} catch (err) {
// Handle any errors that occur during the API request
throw boom.boomify(err);
}
};
exports.changePassword = async (req, reply) => {
try {
const {phone, oldPassword, newPassword } = req.body;
if (!oldPassword || !newPassword) {
return reply.send({
armintatankdata: {
error: true,
code: 10008,
message: "10008 - Old password and new password are required",
},
});
}
// Find user by phone
const user = await User.findOne({ phone });
if (!user) {
return reply.send({
armintatankdata: {
error: true,
code: 10006,
message: "10006 - User not found. Please check the phone number.",
},
});
}
// Verify old password
const isMatch = await bcrypt.compare(oldPassword, user.services.password.bcrypt);
if (!isMatch) {
return reply.send({
armintatankdata: {
error: true,
code: 10009,
message: "10009 - Incorrect old password",
},
});
}
// Hash new password
const hashedPassword = await bcrypt.hash(newPassword, 10);
// Update password
await User.updateOne(
{ phone },
{
$set: {
"services.password.bcrypt": hashedPassword,
oneTimePasswordSetFlag: false, // Reset OTP flag after password change
},
}
);
reply.send({
armintatankdata: {
error: false,
message: "Password changed successfully",
},
});
} catch (err) {
throw boom.boomify(err);
}
};
exports.forgotPasswordSupplier = async (req, reply) => {
try {
// Create a new Supplier object from the request body
var supplier = new Supplier(req.body);
// Check if the request body is URL encoded
checkFormEncoding = isSupplierFormUrlEncoded(req);
if (checkFormEncoding.isSupplierFormUrlEncoded) {
// Extract supplier information from the request body
suppliertobeInserted = checkFormEncoding.supplier;
supplier.username = suppliertobeInserted.username;
supplier.firstName = suppliertobeInserted.firstName;
supplier.lastName = suppliertobeInserted.lastName;
supplier.phone = suppliertobeInserted.phone;
supplier.emails = suppliertobeInserted.emails;
}
// Find a supplier with the given phone number in the database
supplierExists = await Supplier.findOne({
phone: supplier.phone,
});
if (supplierExists) {
// Generate a random password reset code
const code = Math.floor(100000 + Math.random() * 900000);
// Convert the code to a string and hash it using bcrypt
codestr = "";
codestr = code.toString();
hash = await bcryptPassword(codestr);
// Update the supplier's password reset code and password hash in the database
const filter = {
phone: supplierExists.phone,
};
const update = {
$set: {
passwordResetCode: code,
"services.password.bcrypt": hash,
oneTimePasswordSetFlag: true,
},
};
const doc = await Supplier.updateOne(filter, update);
// Find the updated supplier in the database
updatedSupplier = await Supplier.findOne({ phone: supplierExists.phone });
if (updatedSupplier.oneTimePasswordSetFlag) {
// Send an SMS with the password reset code
const request = {
body: {
mobileNumbers: supplierExists.phone,
},
};
const response = {
send: (data) => {
console.log(data); // Optional: Log the response from the SMS provider
// Send a success response with the password reset code
req.body.passwordResetCode = code;
reply.send('{"armintatankdata":{"error":false,"forgotPassword": true}}');
},
};
await exports.sendSms(request, response);
} else {
// Send an error response if the password reset code was not set
error = {
armintatankdata: {
error: true,
code: 10007,
message: "10007 - Unable to reset password",
},
};
req.body.regError = error;
reply.send(error);
}
} else {
// Send an error response if no supplier was found with the given phone number
error = {
armintatankdata: {
error: true,
code: 10006,
message: "10006 - Please check the phone number you entered..",
},
};
req.body.regError = error;
reply.send(error);
}
} catch (err) {
// Handle any errors that occur during the API request
throw boom.boomify(err);
}
};
exports.addTeamMembers = async (req, reply) => {
try {
const customerId = req.params.customerId
console.log(req.params);
deliveryData = {
customerId: customerId,
teamAdminName: req.body.teamAdminName,
name: req.body.Name,
phone: req.body.phone,
};
var agent_mobile = req.body.phone
var i_agent = await AddTeamMembers.findOne({ phone: agent_mobile})
if(i_agent){
throw new Error('phone already exists');
}
else {
var agent = new AddTeamMembers(deliveryData);
checkFormEncoding = isUserFormUrlEncoded(req);
if (checkFormEncoding.isUserFormUrlEncoded) {
usertobeInserted = checkFormEncoding.agent;
console.log("thsi true url string");
agent.customerId = usertobeInserted.customerId
agent.teamAdminName = usertobeInserted.teamAdminName
agent.name = usertobeInserted.name;
agent.phone = usertobeInserted.phone;
}
}
const insertedagent = await agent.save();
console.log("inster...", insertedagent)
return insertedagent;
} catch (err) {
throw boom.boomify(err);
}
};
exports.deleteTeamMember = async (req, reply) => {
try {
var customerId = req.params.customerId;
var phone = req.query.phone;
const delivery = await AddTeamMembers.findOneAndDelete({
phone: phone,
customerId: customerId,
});
reply.send({ status_code: 200, data: delivery });
} catch (err) {
throw boom.boomify(err);
}
};
exports.updateTeamMember = async (req, reply) => {
try {
var customerId = req.params.customerId;
var phone = req.query.phone;
const delivery = req.body;
const { ...updateData } = delivery;
const update = await AddTeamMembers.findOneAndUpdate(
{ phone: phone, customerId: customerId },
updateData,
{ new: true }
);
console.log(update);
//return update;
reply.send({ status_code: 200, data: update });
} catch (err) {
throw boom.boomify(err);
}
};
exports.createstaff = async (request, reply) => {
try {
const { customerId } = request.params;
const { staff } = request.body;
if (!staff || !Array.isArray(staff)) {
return reply.status(400).send({ error: 'Invalid staff data provided' });
}
// Find user by customerId
const user = await User.findOne({ customerId });
if (!user) {
return reply.status(404).send({ error: 'Customer not found' });
}
// Check for duplicate phone numbers
const existingPhones = new Set(user.staff.staff.map((member) => member.phone));
const newStaff = [];
const duplicatePhones = [];
staff.forEach((member) => {
if (member.phone && existingPhones.has(member.phone)) {
duplicatePhones.push(member.phone);
} else {
if (member.phone) {
existingPhones.add(member.phone);
}
newStaff.push({
name: member.name || null,
phone: member.phone || null,
password: member.password || null,
all_motor_access:member.all_motor_access,
status: "active", // Default status
});
}
});
if (duplicatePhones.length > 0) {
return reply.status(400).send({ error: 'Duplicate phone numbers found', duplicatePhones });
}
// Update the user document with the new staff members
user.staff.staff.push(...newStaff);
// Save the updated user document
await user.save();
reply.send({ message: 'Staff members added successfully', staff: user.staff.staff });
} catch (error) {
console.error('Error creating staff:', error);
reply.status(500).send({ error: 'An error occurred while adding staff' });
}
};
exports.editStaff = async (request, reply) => {
try {
const { customerId, phone } = request.params;
const { name, password,all_motor_access } = request.body;
const user = await User.findOne({ customerId, "staff.staff.phone": phone });
if (!user) {
return reply.status(404).send({ error: 'Staff member not found' });
}
const staffMember = user.staff.staff.find(member => member.phone === phone);
staffMember.name = name || staffMember.name;
staffMember.password = password || staffMember.password;
staffMember.all_motor_access = all_motor_access || staffMember.all_motor_access;
await user.save();
reply.send({ message: 'Staff member updated successfully', staff: staffMember });
} catch (error) {
console.error('Error updating staff member:', error);
reply.status(500).send({ error: 'An error occurred while updating staff' });
}
};
exports.deleteStaff = async (request, reply) => {
try {
const { customerId, phone } = request.params;
const user = await User.findOne({ customerId });
if (!user) {
return reply.status(404).send({ error: 'Customer not found' });
}
const initialLength = user.staff.staff.length;
user.staff.staff = user.staff.staff.filter(member => member.phone !== phone);
if (initialLength === user.staff.staff.length) {
return reply.status(404).send({ error: 'Staff member not found' });
}
await user.save();
reply.send({ message: 'Staff member deleted successfully' });
} catch (error) {
console.error('Error deleting staff member:', error);
reply.status(500).send({ error: 'An error occurred while deleting staff' });
}
};
exports.blockStaff = async (request, reply) => {
try {
const { customerId, phone } = request.params;
const user = await User.findOne({ customerId, "staff.staff.phone": phone });
if (!user) {
return reply.status(404).send({ error: 'Staff member not found' });
}
const staffMember = user.staff.staff.find(member => member.phone === phone);
staffMember.status = 'blocked';
await user.save();
reply.send({ message: 'Staff member blocked successfully', staff: staffMember });
} catch (error) {
console.error('Error blocking staff member:', error);
reply.status(500).send({ error: 'An error occurred while blocking staff' });
}
};