* @param {String} method
* @param {arguments} args
*/
- _notImplemented(method, args) {
+ _notImplemented(method, args) {
this.logger.error(_fileScope(method), 'abstract method called', Array.from(args));
throw new DBErrors.NotImplemented(method);
}
* Some engines will also perform other initializations or async actions which
* are easier handled outside the constructor.
*/
- async initialize() {
+ async initialize() {
const _scope = _fileScope('initialize');
const currentSchema = await this._currentSchema();
const current = svh.schemaVersionObjectToNumber(currentSchema);
const min = svh.schemaVersionObjectToNumber(this.schemaVersionsSupported.min);
const max = svh.schemaVersionObjectToNumber(this.schemaVersionsSupported.max);
- if (min >= current && max <= current) {
+ if (current >= min && current <= max) {
this.logger.debug(_scope, 'schema supported', { currentSchema, schemaVersionsSupported: this.schemaVersionsSupported });
} else {
this.logger.error(_scope, 'schema not supported', { currentSchema, schemaVersionsSupported: this.schemaVersionsSupported });
this._ensureTypes(data, ['content'], ['string', 'buffer']);
this._ensureTypes(data, ['contentHash'], ['string']);
this._ensureTypes(data, ['contentType'], ['string', 'null', 'undefined']);
+ this._ensureTypes(data, ['eTag'], ['string', 'null', 'undefined']);
+ this._ensureTypes(data, ['lastModified'], ['string', 'null', 'undefined']);
}
}
+ /**
+ * Remove any expired subscriptions to a topic.
+ * @param {*} dbCtx
+ * @param {*} topicId
+ */
+ async subscriptionDeleteExpired(dbCtx, topicId) {
+ this._notImplemented('subscriptionDeleteExpired', arguments);
+ }
+
+
/**
* Claim subscriptions needing content updates attempted.
* @param {*} dbCtx
* @param {String} callback
* @param {*} topicId
*/
- async subscriptionGet(dbCtx, callback, topicId) {
+ async subscriptionGet(dbCtx, callback, topicId) {
this._notImplemented('subscriptionGet', arguments);
}
* @param {String=} data.httpRemoteAddr
* @param {String=} data.httpFrom
*/
- async subscriptionUpsert(dbCtx, data) {
+ async subscriptionUpsert(dbCtx, data) {
this._notImplemented('subscriptionUpsert', arguments);
}
* @param {*} topicId
* @returns {Boolean}
*/
- async topicFetchRequested(dbCtx, topicId) {
+ async topicFetchRequested(dbCtx, topicId) {
this._notImplemented('topicPublish', arguments);
}
this._notImplemented('topicGetAll', arguments);
}
+
/**
* Get topic data, without content.
* @param {*} dbCtx
this._notImplemented('topicGetContentById', arguments);
}
- // /**
- // * Call after an unsubscribe, to check if a topic is awaiting deletion, and that
- // * was the last subscription belaying it.
- // * @param {String|Integer} data topic url or id
- // */
- // async topicPendingDelete(dbCtx, data) {
- // this._notImplemented('topicPendingDelete', arguments);
- // }
+
+ /**
+ * Attempt to delete a topic, which must be set isDeleted, if there
+ * are no more subscriptions belaying its removal.
+ * @param {*} topicId
+ */
+ async topicPendingDelete(dbCtx, topicId) {
+ this._notImplemented('topicPendingDelete', arguments);
+ }
+
+
+ /**
+ * Return an array of the counts of the last #days of topic updates.
+ * @param {*} dbCtx
+ * @param {*} topicId
+ * @param {Number} days
+ * @returns {Number[]}
+ */
+ async topicPublishHistory(dbCtx, topicId, days) {
+ this._notImplemented('topicPublishHistory', arguments);
+ }
/**
/**
* Updates a topic's content data and content update timestamp.
* @param {Object} data
- * @param {Integer} data.topicId
+ * @param {*} data.topicId
* @param {String} data.content
* @param {String} data.contentHash
* @param {String=} data.contentType
+ * @param {String=} data.eTag
+ * @param {String=} data.lastModified
*/
async topicSetContent(dbCtx, data) {
this._notImplemented('topicSetContent', arguments);
* @param {Boolean} claim
* @returns {*} verificationId
*/
- async verificationInsert(dbCtx, verification) {
+ async verificationInsert(dbCtx, verification) {
this._notImplemented('verificationInsert', arguments);
}
* @param {String} data.reason
* @param {Boolean} data.isPublisherValidated
*/
- async verificationUpdate(dbCtx, verificationId, data) {
+ async verificationUpdate(dbCtx, verificationId, data) {
this._notImplemented('verificationUpdate', arguments);
- }
+ }
/**