Skip to content

Commit 18781f1

Browse files
committed
Removes _PushStatus from system classes, uses direct DB access to write
1 parent 120f23c commit 18781f1

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed

spec/PushController.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,18 @@ describe('PushController', () => {
283283
Parse.Object.saveAll(installations).then(() => {
284284
return pushController.sendPush(payload, {}, config, auth);
285285
}).then((result) => {
286+
return new Promise((resolve, reject) => {
287+
setTimeout(() => {
288+
resolve();
289+
}, 1000);
290+
});
291+
}).then(() => {
286292
let query = new Parse.Query('_PushStatus');
287293
return query.find({useMasterKey: true});
288294
}).then((results) => {
289295
expect(results.length).toBe(1);
290296
let result = results[0];
297+
expect(result.createdAt instanceof Date).toBe(true);
291298
expect(result.get('source')).toEqual('rest');
292299
expect(result.get('query')).toEqual(JSON.stringify({}));
293300
expect(result.get('payload')).toEqual(payload.data);
@@ -300,6 +307,11 @@ describe('PushController', () => {
300307
expect(result.get('failedPerType')).toEqual({
301308
'android': 5 // android
302309
});
310+
// Try to get it without masterKey
311+
let query = new Parse.Query('_PushStatus');
312+
return query.find();
313+
}).then((results) => {
314+
expect(results.length).toBe(0);
303315
done();
304316
});
305317

src/Schema.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ var requiredColumns = {
9191
_Role: ["name", "ACL"]
9292
}
9393

94-
const systemClasses = ['_User', '_Installation', '_Role', '_Session', '_Product', '_PushStatus'];
94+
const systemClasses = ['_User', '_Installation', '_Role', '_Session', '_Product'];
9595

9696
// 10 alpha numberic chars + uppercase
9797
const userIdRegex = /^[a-zA-Z0-9]{10}$/;

src/pushStatusHandler.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
import RestWrite from './RestWrite';
2-
import { md5Hash } from './cryptoUtils';
1+
import { md5Hash, newObjectId } from './cryptoUtils';
32

43
export default function pushStatusHandler(config) {
54

65
let initialPromise;
76
let pushStatus;
7+
8+
let collection = function() {
9+
return config.database.adaptiveCollection('_PushStatus');
10+
}
11+
812
let setInitial = function(body, where, options = {source: 'rest'}) {
13+
let now = new Date();
914
let object = {
10-
pushTime: (new Date()).toISOString(),
15+
objectId: newObjectId(),
16+
pushTime: now.toISOString(),
17+
_created_at: now,
1118
query: JSON.stringify(where),
1219
payload: body.data,
1320
source: options.source,
@@ -16,21 +23,27 @@ export default function pushStatusHandler(config) {
1623
status: "pending",
1724
numSent: 0,
1825
pushHash: md5Hash(JSON.stringify(body.data)),
19-
ACL: new Parse.ACL() // lockdown!
26+
// lockdown!
27+
_wperm: [],
28+
_rperm: []
2029
}
21-
let restWrite = new RestWrite(config, {isMaster: true},'_PushStatus',null, object);
22-
initialPromise = restWrite.execute().then((res) => {
23-
pushStatus = res.response;
30+
initialPromise = collection().then((collection) => {
31+
return collection.insertOne(object);
32+
}).then((res) => {
33+
pushStatus = {
34+
objectId: object.objectId
35+
};
2436
return Promise.resolve(pushStatus);
25-
});
37+
})
2638
return initialPromise;
2739
}
2840

2941
let setRunning = function() {
3042
return initialPromise.then(() => {
31-
let restWrite = new RestWrite(config, {isMaster: true}, '_PushStatus', {status:"pending", objectId: pushStatus.objectId}, {status: "running"});
32-
return restWrite.execute();
33-
})
43+
return collection();
44+
}).then((collection) => {
45+
return collection.updateOne({status:"pending", objectId: pushStatus.objectId}, {$set: {status: "running"}});
46+
});
3447
}
3548

3649
let complete = function(results) {
@@ -63,9 +76,10 @@ export default function pushStatusHandler(config) {
6376
}
6477

6578
return initialPromise.then(() => {
66-
let restWrite = new RestWrite(config, {isMaster: true}, '_PushStatus', {status:"running", objectId: pushStatus.objectId}, update);
67-
return restWrite.execute();
68-
})
79+
return collection();
80+
}).then((collection) => {
81+
return collection.updateOne({status:"running", objectId: pushStatus.objectId}, {$set: update});
82+
});
6983
}
7084

7185
return Object.freeze({

0 commit comments

Comments
 (0)