const fastify = require("fastify")({ logger: true, }); const boom = require("boom"); const customJwtAuth = require("../customAuthJwt"); const bcrypt = require("bcrypt"); const saltRounds = 10; //Get the data models const { Supplier ,ProfilePicture, generateSupplierId} = require('../models/supplier'); async function bcryptPassword(password) { encryptedPwd = bcrypt.hash(password, saltRounds); return encryptedPwd; } async function bcryptComparePassword(pwd, encpassword) { isSame = bcrypt.compare(pwd, encpassword); return isSame; } //Supplier Login Controller exports.loginSupplier = async (req) => { try { const phone = req.body.phone; const password = req.body.password; const supplier = await Supplier.findOne({ phone: phone }); // compare supplier password with what is supplied if (supplier) { isSame = await bcryptComparePassword( password, supplier.services.password.bcrypt ); // if password supplied matches return object if (isSame) { return { same: true, supplier: supplier }; } else { return { same: false }; } } else { return { same: false }; } } catch (err) { throw boom.boomify(err); } }; exports.addSupplier = async (req, reply) => { try { // await resetCounter();//to set customer id back to 0 var s_id = await generateSupplierId() var building= ((req.body.suppliername).slice(0, 3)).toUpperCase(); var supplier_id = `AWSS${building}${s_id}` // console.log("This is the reply in the handler after the validations", reply); s_data = { supplierId: supplier_id, suppliername: req.body.suppliername, emails: req.body.emails, password: req.body.password, phone: req.body.phone, profile: { firstName: req.body.firstName, lastName: req.body.lastName, contactNumber: req.body.phone, alternativeContactNumber: req.body.alternativeContactNumber, office_address: req.body.office_address, country: req.body.country, state: req.body.state, city: req.body.city, office_adress: req.body.office_adress, zip: req.body.zip, }, }; var supplier = new Supplier(s_data); //password is not at the top level in the collection. supplierpass = req.body.password; // If fields are sent via form encoding , capture the fields and assign them to the supplier Object. checkFormEncoding = isSupplierFormUrlEncoded(req); if (checkFormEncoding.isSupplierFormUrlEncoded) { suppliertobeInserted = checkFormEncoding.supplier; console.log("thsi true url string"); supplier.suppliername = suppliertobeInserted.suppliername; supplier.firstName = suppliertobeInserted.firstName; supplier.lastName = suppliertobeInserted.lastName; supplier.phone = suppliertobeInserted.phone; supplier.emails = suppliertobeInserted.emails; supplier.passsword = suppliertobeInserted.password; supplier.supplierId = suppliertobeInserted.supplier_id; supplier.office_adress = suppliertobeInserted.office_adress; supplier.alternativeContactNumber = suppliertobeInserted.alternativeContactNumber; } console.log("---------checkurl ecnoded string-----------------------"); // Store hash in your password DB. hash = await bcryptPassword(supplierpass); if (hash) { supplier.services.password.bcrypt = hash; if (req.body.role) { supplier.profile.role = req.body.role; console.log("******************************************************"); console.log(supplier); } else { role = ["supplier"]; supplier.profile.role = role; } insertedSupplier = await supplier.save(); console.log(insertedSupplier); if (insertedSupplier) { // Prepare supplier object and wrap it inside the armintatankdata var retSupplier = { armintatankdata: { suppliername: insertedSupplier.suppliername, phone: insertedSupplier.phone, supplierId: insertedSupplier.supplierId, office_adress: insertedSupplier.office_adress, emails: [ { email: insertedSupplier.emails[0].email, }, ], profile: insertedSupplier.profile, }, status_code: 200, }; return retSupplier; } } } catch (err) { throw boom.boomify(err); } }; exports.editCuurentSupplierInfo = async (req, reply) => { try { const { supplierId } = req.params; const supplierInfo = await Supplier.findOne({ supplierId: supplierId.toString() }); const updateData = req.body; if (updateData.firstName) supplierInfo.profile.firstName = updateData.firstName; if (updateData.lastName) supplierInfo.profile.lastName = updateData.lastName; if (updateData.suppliername) supplierInfo.suppliername = updateData.suppliername; if (updateData.phone) supplierInfo.profile.contactNumber = updateData.phone; if (updateData.office_address) supplierInfo.profile.office_address = updateData.office_address; if (updateData.alternativeContactNumber) supplierInfo.profile.alternativeContactNumber = updateData.alternativeContactNumber; if (updateData.city) supplierInfo.profile.city = updateData.city; if (updateData.state) supplierInfo.profile.state = updateData.state; if (updateData.country) supplierInfo.profile.country = updateData.country; if (updateData.zip) supplierInfo.profile.zip = updateData.zip; if (updateData.phone) supplierInfo.phone = updateData.phone; if (updateData.emails) supplierInfo.emails = updateData.emails; console.log(supplierInfo.emails[0].email) if (updateData.role) supplierInfo.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 (supplierInfo.phone == updateData.phone) { console.log("IF++++++++++++++="); supplierInfo.phone = updateData.phone; supplierInfo.phoneVerified = true; } else { console.log("Ilse++++++++++++++="); supplierInfo.phone = updateData.phone; supplierInfo.phoneVerified = false; } const supplier = await supplierInfo.save(); return supplier; } catch (err) { throw boom.boomify(err); } };