@ -1,7 +1,7 @@
//Get the data models
const { Supplier } = require ( '../models/supplier' ) ;
const { Supplier , DeliveryBoy } = require ( '../models/supplier' ) ;
const { FriendRequest } = require ( '../models/supplier' )
const { ProfilePicture } = require ( '../models/User' )
const { ProfilePicture , User } = require ( '../models/User' )
const supplierController = require ( "../controllers/supplierController" ) ;
const customJwtAuth = require ( "../customAuthJwt" ) ;
const fastify = require ( "fastify" ) ( {
@ -235,6 +235,114 @@ exports.loginSupplier = async(request, reply) =>{
}
//Login Delivery Handler
exports . loginDeliveryBoy = async ( request , reply ) => {
loginObject = await supplierController . loginDeliveryBoy ( request ) ;
console . log ( "loginObject..." , loginObject )
if ( loginObject . same ) {
const phoneVerified = loginObject . delivery . phoneVerified ;
const oneTimePasswordSetFlag = loginObject . delivery . oneTimePasswordSetFlag ;
console . log (
"oneTimePasswordSetFlag is ......" ,
oneTimePasswordSetFlag ,
typeof oneTimePasswordSetFlag ,
typeof phoneVerified
) ;
if ( ! phoneVerified ) {
reply . send ( {
simplydata : {
error : false ,
phoneVerified : false ,
phone : loginObject . delivery . phone ,
oneTimePasswordSetFlag : oneTimePasswordSetFlag ,
message : "Please Verify your phone number" ,
} ,
} ) ;
} else if ( oneTimePasswordSetFlag ) {
reply . send ( {
simplydata : {
error : false ,
phoneVerified : phoneVerified ,
phone : loginObject . delivery . phone ,
oneTimePasswordSetFlag : true ,
message : "Password must be reset" ,
} ,
} ) ;
} else {
const token = fastify . jwt . sign (
{
deliveryBoyname : loginObject . delivery . name ,
deliveryBoyId : loginObject . delivery . _id ,
} ,
//expiresIn: expressed in seconds or a string describing a time span zeit/ms. Eg: 60, "2 days", "10h", "7d".
//A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc),
//otherwise milliseconds unit is used by default ("120" is equal to "120ms").
{ expiresIn : "30d" }
) ;
console . log ( token , "..token" )
var d _id = loginObject . delivery . _id
console . log ( d _id , "deliveryId" )
var profilePicture = await ProfilePicture . findOne ( { deliveryBoyId : d _id } ) ;
// request.session.set('supplierId', loginObject.supplier._id)
if ( ! profilePicture ) {
reply . send ( {
simplydata : {
error : false ,
apiversion : fastify . config . APIVERSION ,
access _token : token ,
phone : loginObject . delivery . phone ,
deliveryBoyId : loginObject . delivery . deliveryBoyId ,
deliveryBoyname : loginObject . delivery . name ,
address : loginObject . delivery . address ,
phoneVerified : loginObject . delivery . phoneVerified ,
oneTimePasswordSetFlag : loginObject . delivery . oneTimePasswordSetFlag ,
} ,
} ) ;
} if ( profilePicture ) {
reply . send ( {
simplydata : {
error : false ,
apiversion : fastify . config . APIVERSION ,
access _token : token ,
picture : profilePicture . picture ,
phone : loginObject . delivery . phone ,
deliveryBoyId : loginObject . delivery . deliveryBoyId ,
deliveryBoyname : loginObject . delivery . name ,
address : loginObject . delivery . address ,
phoneVerified : loginObject . delivery . phoneVerified ,
oneTimePasswordSetFlag : loginObject . delivery . oneTimePasswordSetFlag ,
} ,
} ) ;
}
}
} else {
error = {
simplydata : {
error : true ,
code : 400 ,
message : "Invalid Details" ,
} ,
} ;
reply . send ( error ) ;
}
}
// Check if all the required fields are supplied by the user
exports . fieldCheck = async ( req , reply ) => {
@ -525,8 +633,104 @@ exports.logoutsupplier = async (request, reply) => {
throw boom . boomify ( err ) ;
}
} ;
exports . deliveryBoyVerifyPhone = async ( req , reply ) => {
console . log ( "-------------------------------------------------" ) ;
try {
phone = req . body . phone ;
phoneVerificationCode = req . body . phoneVerificationCode ;
// check if user exists in the system. If user exists , display message that
// username is not available
console . log (
"this is the phone and verification code" ,
phone ,
phoneVerificationCode
) ;
deliveryBoyExists = await DeliveryBoy . findOne ( {
phone : phone ,
phoneVerified : false ,
phoneVerificationCode : phoneVerificationCode ,
} ) ;
console . log ( deliveryBoyExists ) ;
if ( deliveryBoyExists ) {
// update the phoneVerified flag to true.
const filter = {
phone : phone ,
phoneVerificationCode : phoneVerificationCode ,
} ;
const update = { phoneVerified : true } ;
const doc = await DeliveryBoy . findOneAndUpdate ( filter , update ) ;
updatedDeliveryBoy = await DeliveryBoy . findOne ( { phone : phone } ) ;
if ( updatedDeliveryBoy . phoneVerified ) {
reply . send ( '{"armintatankdata":{"error":false,"verified": true}}' ) ;
} else {
error = {
armintatankdata : {
error : true ,
code : 10005 ,
message : "10005 - Verification code entered cannot be validated." ,
} ,
} ;
req . body . regError = error ;
reply . send ( error ) ;
}
} else {
error = {
armintatankdata : {
error : true ,
code : 10005 ,
message : "10005 - Verification code entered cannot be validated." ,
} ,
} ;
req . body . regError = error ;
reply . send ( error ) ;
}
} catch ( err ) {
throw boom . boomify ( err ) ;
}
} ;
//delete selected deliveryboy
exports . deleteDeliveryBoy = async ( req , reply ) => {
try {
var supplierId = req . params . supplierId ;
var phone = req . query . phone ;
const delivery = await DeliveryBoy . findOneAndDelete ( { phone : phone , supplierId : supplierId } ) ;
reply . send ( { status _code : 200 , data : delivery } ) ;
// return tank;
} catch ( err ) {
throw boom . boomify ( err ) ;
}
} ;
//update selected Delivery Boy Details
exports . updateDeliveryBoy = async ( req , reply ) => {
try {
var supplierId = req . params . supplierId ;
var phone = req . query . phone ;
const delivery = req . body ;
const { ... updateData } = delivery ;
const update = await DeliveryBoy . findOneAndUpdate ( { phone : phone , supplierId : supplierId , } , updateData , { new : true } ) ;
console . log ( update )
//return update;
reply . send ( { status _code : 200 , data : update } ) ;
}
catch ( err ) {
throw boom . boomify ( err ) ;
}
} ;
// Get current supplier
exports . getCurrentSupplier = async ( req , reply ) => {
try {
@ -650,3 +854,59 @@ exports.getPendingSuppliers = async (req, reply) => {
} ;
exports . getPendingCustomers = async ( req , reply ) => {
const limit = parseInt ( req . query . limit ) || 100 ;
const page = parseInt ( req . query . page ) || 1 ;
const startindex = ( page - 1 ) * limit ;
const supplierId = req . params . supplierId ; // Assuming you have already authenticated the user and stored their ID in the request object
try {
const friendRequests = await FriendRequest . find ( { supplierId , status : [ "pending" , "rejected" ] } ) ;
console . log ( friendRequests , supplierId , "su...." )
const supplierIdsToInclude = friendRequests . map ( ( request ) => request . customerId ) ;
console . log ( supplierIdsToInclude , "supplierIdsToInclude.." )
await User . find ( { customerId : { $in : supplierIdsToInclude } } )
. 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 ) ;
}
} ;
exports . getconnectedCustomers = async ( req , reply ) => {
const limit = parseInt ( req . query . limit ) || 100 ;
const page = parseInt ( req . query . page ) || 1 ;
const startindex = ( page - 1 ) * limit ;
const supplierId = req . params . supplierId ; // Assuming you have already authenticated the user and stored their ID in the request object
try {
const friendRequests = await FriendRequest . find ( { supplierId , status : [ "accepted" ] } ) ;
console . log ( friendRequests , supplierId , "su...." )
const supplierIdsToInclude = friendRequests . map ( ( request ) => request . customerId ) ;
console . log ( supplierIdsToInclude , "supplierIdsToInclude.." )
await User . find ( { customerId : { $in : supplierIdsToInclude } } )
. 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 ) ;
}
} ;