server: Auto-populate liza_timestamp_initial_rated in metabucket
This value already existed on the document, but was inaccessible to external systems. This is now accessible to e.g. raters. * doc/bucket.texi (Metabucket): New section. * src/server/db/MongoServerDao.js (saveQuote): Set initial quoted date as liza_timestamp_initial_rated. Update metabucket keys individually so as not to inadvertently overwrite the entire metabucket. DEV-3715master
parent
37a6805110
commit
833017c359
|
@ -16,6 +16,7 @@
|
||||||
* Value Assignment:Bucket Assignment. Writing data to the Bucket.
|
* Value Assignment:Bucket Assignment. Writing data to the Bucket.
|
||||||
* Bucket Diff:: Representing bucket changes.
|
* Bucket Diff:: Representing bucket changes.
|
||||||
* Calculated Values:: Dynamic data derived from other values.
|
* Calculated Values:: Dynamic data derived from other values.
|
||||||
|
* Metabucket:: Bucket holding document metadata
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,3 +117,32 @@ A diff is applied to the underlying bucket by invoking
|
||||||
@node Calculated Values
|
@node Calculated Values
|
||||||
@section Calculated Values
|
@section Calculated Values
|
||||||
@helpwanted
|
@helpwanted
|
||||||
|
|
||||||
|
|
||||||
|
@node Metabucket
|
||||||
|
@section Metabucket
|
||||||
|
@cindex Metabucket
|
||||||
|
The @dfn{metabucket} is a loosely-structured key/value store
|
||||||
|
separate from the data bucket.@footnote{
|
||||||
|
It is stored in the @code{meta} field on the Mongo document.}
|
||||||
|
It should be used to save data that should be accessible only to the server,
|
||||||
|
but never the client.
|
||||||
|
|
||||||
|
The client has no means by which to access the metabucket.
|
||||||
|
Custom fields can be populated by server-side DataAPIs
|
||||||
|
(@pxref{Server-Side Data API Calls}).
|
||||||
|
|
||||||
|
Any fields prefixed with the string @samp{liza_} are reserved and are
|
||||||
|
populated automatically by the Server.
|
||||||
|
They are shown in @ref{t:liza-meta}.
|
||||||
|
|
||||||
|
@float Table, t:liza-meta
|
||||||
|
@table @code
|
||||||
|
@cindex Initial rated date
|
||||||
|
@item liza_timestamp_initial_rated
|
||||||
|
A Unix timestamp representing the first time a document was acted
|
||||||
|
upon by a rating service.
|
||||||
|
This value is set once and is never updated or cleared.
|
||||||
|
@end table
|
||||||
|
@caption{Metabucket fields populated automatically by the Server}
|
||||||
|
@end float
|
||||||
|
|
|
@ -287,7 +287,8 @@ module.exports = Class( 'MongoServerDao' )
|
||||||
quote, success_callback, failure_callback, save_data
|
quote, success_callback, failure_callback, save_data
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var dao = this;
|
var dao = this;
|
||||||
|
const meta = {};
|
||||||
|
|
||||||
// if we're not ready, then we can't save the quote!
|
// if we're not ready, then we can't save the quote!
|
||||||
if ( this._ready === false )
|
if ( this._ready === false )
|
||||||
|
@ -309,7 +310,7 @@ module.exports = Class( 'MongoServerDao' )
|
||||||
};
|
};
|
||||||
|
|
||||||
// full save will include all metadata
|
// full save will include all metadata
|
||||||
save_data.meta = quote.getMetabucket().getData();
|
meta = quote.getMetabucket().getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// when we update the quote data, clear quick save data (this data
|
// when we update the quote data, clear quick save data (this data
|
||||||
|
@ -333,9 +334,17 @@ module.exports = Class( 'MongoServerDao' )
|
||||||
( new Date() ).getTime() / 1000
|
( new Date() ).getTime() / 1000
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// meta will eventually take over for much of the above data
|
||||||
|
meta.liza_timestamp_initial_rated = quote.getRatedDate();
|
||||||
|
|
||||||
// save the stack so we can track this call via the oplog
|
// save the stack so we can track this call via the oplog
|
||||||
save_data._stack = ( new Error() ).stack;
|
save_data._stack = ( new Error() ).stack;
|
||||||
|
|
||||||
|
// avoid wiping out other metadata (since this may not be a full set)
|
||||||
|
Object.keys( meta ).forEach(
|
||||||
|
key => save_data[ 'meta.' + key ] = meta[ key ]
|
||||||
|
);
|
||||||
|
|
||||||
// update the quote data if it already exists (same id), otherwise
|
// update the quote data if it already exists (same id), otherwise
|
||||||
// insert it
|
// insert it
|
||||||
this._collection.update( { id: id },
|
this._collection.update( { id: id },
|
||||||
|
|
Loading…
Reference in New Issue