1
0
Fork 0

Process metadata and provide to rate process

Prefixes with "meta:".

* src/server/Server.js (initQuote): Initialze metadata to empty.
* src/server/daemon/controller.js (createQuote): Add metabucket.
* src/server/db/MongoServerDao.js (saveQuote): Add additional
  documentation to docblock.  Save all metadata if no bucket data
  provided (which indicates a full quote save).  This happens on
  version change.
* src/server/rater/ProcessManager.js (_genData): Add method to merge
  metadata into bucket data with "meta:" prefix.
  (byId): Use merged data.
master
Mike Gerwitz 2017-07-10 10:02:57 -04:00
parent 22c3a21cdf
commit 2eacd310b2
4 changed files with 40 additions and 3 deletions

View File

@ -311,6 +311,7 @@ module.exports = Class( 'Server' )
.setData(
server._getDefaultBucket( quote_program, quote_data )
)
.setMetadata( quote_data.meta || {} )
.setQuickSaveData( quote_data.quicksave || {} )
.setAgentId( quote_data.agentId || agent_id )
.setAgentName( quote_data.agentName || agent_name )

View File

@ -585,8 +585,11 @@ function createQuote( quote_id, program, request, callback, error_callback )
);
}
var bucket = QuoteDataBucket(),
quote = Quote( quote_id, bucket );
var bucket = QuoteDataBucket(),
metabucket = QuoteDataBucket(),
quote = Quote( quote_id, bucket );
quote.setMetabucket( metabucket );
var controller = this;
return server.initQuote( quote, program, request,

View File

@ -271,6 +271,11 @@ module.exports = Class( 'MongoServerDao' )
/**
* Saves a quote to the database
*
* A full save will include all metadata. This should not cause any
* problems with race conditions for pending Data API calls on meta
* fields because those results write to individual indexes and do not
* rely on existing data.
*
* @param Quote quote the quote to save
* @param Function success_callback function to call on success
* @param Function failure_callback function to call if save fails
@ -302,6 +307,9 @@ module.exports = Class( 'MongoServerDao' )
save_data = {
data: quote.getBucket().getData(),
};
// full save will include all metadata
save_data.meta = quote.getMetabucket().getData();
}
else if ( save_data.data !== undefined )
{

View File

@ -211,7 +211,7 @@ module.exports = Class( 'ProcessManager',
id: quote.getId(),
agentId: quote.getAgentId(),
agentName: quote.getAgentName(),
data: quote.getBucket().getData(),
data: this._genData( quote ),
creditScoreRef: quote.getCreditScoreRef(),
},
@ -223,6 +223,31 @@ module.exports = Class( 'ProcessManager',
},
/**
* Generate data to provide to rater
*
* Bucket data is used as-is. Metadata are merged with a "meta:" prefix.
*
* @param {ServerSideQuote} quote source quote
*
* @return {Object} merged data
*/
'private _genData'( quote )
{
const dest = {};
const metadata = quote.getMetabucket().getData();
Object.assign( dest, quote.getBucket().getData() );
for ( let key in metadata )
{
dest[ 'meta:' + key ] = metadata[ key ];
}
return dest;
},
'private _rateReply'( msg, errc )
{
var rqid = msg.rqid,