Files
kami-parse-server/src/Push/PushQueue.js
Diamond Lewis e6ac3b6932 fix(prettier): Properly handle lint-stage files (#6970)
Now handles top level files and recursive files in folders.

Set max line length to be 100
2020-10-25 15:06:58 -05:00

66 lines
1.8 KiB
JavaScript

import { ParseMessageQueue } from '../ParseMessageQueue';
import rest from '../rest';
import { applyDeviceTokenExists } from './utils';
import Parse from 'parse/node';
const PUSH_CHANNEL = 'parse-server-push';
const DEFAULT_BATCH_SIZE = 100;
export class PushQueue {
parsePublisher: Object;
channel: String;
batchSize: Number;
// config object of the publisher, right now it only contains the redisURL,
// but we may extend it later.
constructor(config: any = {}) {
this.channel = config.channel || PushQueue.defaultPushChannel();
this.batchSize = config.batchSize || DEFAULT_BATCH_SIZE;
this.parsePublisher = ParseMessageQueue.createPublisher(config);
}
static defaultPushChannel() {
return `${Parse.applicationId}-${PUSH_CHANNEL}`;
}
enqueue(body, where, config, auth, pushStatus) {
const limit = this.batchSize;
where = applyDeviceTokenExists(where);
// Order by objectId so no impact on the DB
const order = 'objectId';
return Promise.resolve()
.then(() => {
return rest.find(config, auth, '_Installation', where, {
limit: 0,
count: true,
});
})
.then(({ results, count }) => {
if (!results || count == 0) {
return pushStatus.complete();
}
pushStatus.setRunning(Math.ceil(count / limit));
let skip = 0;
while (skip < count) {
const query = {
where,
limit,
skip,
order,
};
const pushWorkItem = {
body,
query,
pushStatus: { objectId: pushStatus.objectId },
applicationId: config.applicationId,
};
this.parsePublisher.publish(this.channel, JSON.stringify(pushWorkItem));
skip += limit;
}
});
}
}