fix(proposal events): Add userId to update accepted_by and reorder event to update all objects in time

This commit is contained in:
Josepablo C
2025-04-08 22:41:19 -06:00
parent d01859db70
commit 97b0b2ff88
3 changed files with 25 additions and 20 deletions

View File

@@ -120,7 +120,7 @@ const patchProposal = async(req, res) => {
throw "proposal data not sent"; throw "proposal data not sent";
} }
await Model.findByIdAndUpdate( elementId , data ); await Model.findByIdAndUpdate( elementId , data );
await onPatchEvent( elementId , data ); await onPatchEvent( req.context.userId, elementId, data );
return res.send( await Model.findById( elementId ) ); return res.send( await Model.findById( elementId ) );
}catch(error){ }catch(error){
console.error( error ); console.error( error );
@@ -137,7 +137,7 @@ const postProposal = async(req, res) => {
const proposal = new Model( data ); const proposal = new Model( data );
await proposal.save(); await proposal.save();
await onPostEvent(proposal.id, data); await onPostEvent( req.context.userId, proposal.id, data);
return res.send( proposal ); return res.send( proposal );
}catch(error){ }catch(error){
console.error( error ); console.error( error );

View File

@@ -15,8 +15,8 @@ const productsModel = getModel('products');
/** /**
* When the proposal is created then the load owner should be notified * When the proposal is created then the load owner should be notified
*/ */
async function onProposalCreate( proposal_id ){ async function onProposalCreate( userId, proposalId ){
const proposal = await proposalsModel.findById( proposal_id ); const proposal = await proposalsModel.findById( proposalId );
const load = await loadsModel.findById( proposal.load ); const load = await loadsModel.findById( proposal.load );
const user = await usersModel.findById( load.posted_by ); const user = await usersModel.findById( load.posted_by );
@@ -34,13 +34,15 @@ async function onProposalCreate( proposal_id ){
/** /**
* When a proposal is removed from the load, it is considered as rejected * When a proposal is removed from the load, it is considered as rejected
*/ */
async function onProposalRejected( proposal_id ){ async function onProposalRejected( userId, proposalId ){
const proposal = await proposalsModel.findById( proposal_id ); const proposal = await proposalsModel.findById( proposalId );
/// Update Proposal: /// Update Proposal:
/// Remove shipper /// Remove shipper
await proposalsModel.findByIdAndUpdate( proposal_id , { await proposalsModel.findByIdAndUpdate( proposalId , {
shipper : null shipper : null,
accepted_by : null,
accepted_date : null
} ); } );
/// Update Load: /// Update Load:
@@ -56,19 +58,21 @@ async function onProposalRejected( proposal_id ){
/** /**
* When a proposal is accepted by the shipper * When a proposal is accepted by the shipper
*/ */
async function onProposalAccepted( proposal_id ){ async function onProposalAccepted( userId, proposalId ){
const proposal = await proposalsModel.findById( proposal_id ); const shipper_user = await usersModel.findById( userId );
const shipper_user = await usersModel.findById( proposal.accepted_by );
const shipper = await companiesModel.findById( shipper_user.company ); const shipper = await companiesModel.findById( shipper_user.company );
const vehicle = await vehiclesModel.findById( proposal.vehicle );
const load = await loadsModel.findById( proposal.load );
/// Update Proposal: /// Update Proposal:
/// Adding shipper to proposal /// Adding shipper to proposal
await proposalsModel.findByIdAndUpdate( proposal_id , { await proposalsModel.findByIdAndUpdate( proposalId , {
shipper : shipper.id shipper : shipper.id,
accepted_by : userId,
accepted_date : new Date().toISOString()
} ); } );
const proposal = await proposalsModel.findById( proposalId );
const vehicle = await vehiclesModel.findById( proposal.vehicle );
/// Update Load: /// Update Load:
/// Add carrier, driver and vehicle /// Add carrier, driver and vehicle
await loadsModel.findByIdAndUpdate( proposal.load, { await loadsModel.findByIdAndUpdate( proposal.load, {
@@ -78,6 +82,7 @@ async function onProposalAccepted( proposal_id ){
bidder : proposal.bidder // Who created the proposal (carrier user) bidder : proposal.bidder // Who created the proposal (carrier user)
} ); } );
const load = await loadsModel.findById( proposal.load );
const carrier = await companiesModel.findById( load.carrier ); const carrier = await companiesModel.findById( load.carrier );
const product = await productsModel.findById( load.product ); const product = await productsModel.findById( load.product );
const driver = await usersModel.findById( load.driver ); const driver = await usersModel.findById( load.driver );

View File

@@ -16,9 +16,9 @@ const notificationsModel = getModel('notifications');
* @param {*} newProposalData * @param {*} newProposalData
* @returns * @returns
*/ */
async function onPostEvent( id , newProposalData ){ async function onPostEvent( userId, proposalId ,newProposalData ){
/// When a post event happens it is assumed that a proposal is created /// When a post event happens it is assumed that a proposal is created
ProposalsEvents.onProposalCreate( id ); ProposalsEvents.onProposalCreate( userId, proposalId );
} }
/** /**
@@ -28,11 +28,11 @@ async function onPostEvent( id , newProposalData ){
* @param {*} newProposalData * @param {*} newProposalData
* @returns * @returns
*/ */
async function onPatchEvent( id , newProposalData ){ async function onPatchEvent( userId, proposalId , newProposalData ){
if( !newProposalData.is_accepted ){ if( !newProposalData.is_accepted ){
ProposalsEvents.onProposalRejected( id ); ProposalsEvents.onProposalRejected( userId, proposalId );
}else{ }else{
ProposalsEvents.onProposalAccepted( id ); ProposalsEvents.onProposalAccepted( userId, proposalId );
} }
} }