Skip to content

Commit 9b49f1f

Browse files
committed
Merge remote-tracking branch 'remotes/origin/pr_beforeUnsubscribe'
2 parents fce0b14 + ab796c2 commit 9b49f1f

File tree

4 files changed

+54
-14
lines changed

4 files changed

+54
-14
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ ___
150150
- Add CI check to add changelog entry (Manuel Trezza) [#7512](https://github.com/parse-community/parse-server/pull/7512)
151151
- Refactor: uniform issue templates across repos (Manuel Trezza) [#7528](https://github.com/parse-community/parse-server/pull/7528)
152152
- ci: bump ci environment (Manuel Trezza) [#7539](https://github.com/parse-community/parse-server/pull/7539)
153+
- Added Cloud Trigger for LiveQuery event beforeUnsubscribe (sadortun) [#7419](https://github.com/parse-community/parse-server/pull/7419)
153154

154155
## 4.10.3
155156
[Full Changelog](https://github.com/parse-community/parse-server/compare/4.10.2...4.10.3)

spec/ParseLiveQuery.spec.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,45 @@ describe('ParseLiveQuery', function () {
645645
await object.save();
646646
});
647647

648+
it('can handle select beforeUnsubscribe trigger', async done => {
649+
await reconfigureServer({
650+
liveQuery: {
651+
classNames: ['TestObject'],
652+
},
653+
startLiveQueryServer: true,
654+
verbose: false,
655+
silent: true,
656+
});
657+
const user = new Parse.User();
658+
user.setUsername('username');
659+
user.setPassword('password');
660+
await user.signUp();
661+
662+
Parse.Cloud.beforeSubscribe(TestObject, req => {
663+
expect(req.requestId).toBe(1);
664+
expect(req.user).toBeDefined();
665+
});
666+
667+
Parse.Cloud.beforeUnsubscribe(TestObject, req => {
668+
expect(req.requestId).toBe(1);
669+
expect(req.user).toBeDefined();
670+
expect(req.user.get('username')).toBe('username');
671+
done();
672+
});
673+
674+
const object = new TestObject();
675+
await object.save();
676+
677+
const query = new Parse.Query(TestObject);
678+
query.equalTo('objectId', object.id);
679+
const subscription = await query.subscribe();
680+
681+
object.set({ foo: 'bar', yolo: 'abc' });
682+
await object.save();
683+
684+
await subscription.unsubscribe();
685+
});
686+
648687
it('LiveQuery with ACL', async () => {
649688
await reconfigureServer({
650689
liveQuery: {

src/LiveQuery/ParseLiveQueryServer.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -848,20 +848,24 @@ class ParseLiveQueryServer {
848848
request.user = auth.user;
849849
}
850850

851-
const parseQuery = new Parse.Query(className);
852-
parseQuery.withJSON(request.query);
853-
request.query = subscription.query;
854851
request.sessionToken = subscriptionInfo.sessionToken;
855852
request.useMasterKey = client.hasMasterKey;
856853
request.installationId = client.installationId;
857854

858-
await runTrigger(trigger, `beforeUnsubscribe.${className}`, request, auth);
859-
860-
const query = request.query.toJSON();
861-
if (query.keys) {
862-
query.fields = query.keys.split(',');
855+
try {
856+
await runTrigger(trigger, `beforeUnsubscribe.${className}`, request, auth);
857+
} catch (error) {
858+
Client.pushError(
859+
parseWebsocket,
860+
error.code || Parse.Error.SCRIPT_FAILED,
861+
error.message || error,
862+
false
863+
);
864+
logger.error(
865+
`Failed running beforeUnsubscribe for session ${request.sessionToken} with:\n Error: ` +
866+
JSON.stringify(error)
867+
);
863868
}
864-
request.query = query;
865869
}
866870

867871
// Remove subscription from client

src/cloud-code/Parse.Cloud.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ ParseCloud.onLiveQueryEvent = function (handler) {
703703
*/
704704
ParseCloud.beforeUnsubscribe = function (parseClass, handler, validationHandler) {
705705
validateValidator(validationHandler);
706-
var className = getClassName(parseClass);
706+
const className = getClassName(parseClass);
707707
triggers.addTrigger(
708708
triggers.Types.beforeUnsubscribe,
709709
className,
@@ -713,10 +713,6 @@ ParseCloud.beforeUnsubscribe = function (parseClass, handler, validationHandler)
713713
);
714714
};
715715

716-
ParseCloud.onLiveQueryEvent = function (handler) {
717-
triggers.addLiveQueryEventHandler(handler, Parse.applicationId);
718-
};
719-
720716
/**
721717
* Registers an after live query server event function.
722718
*

0 commit comments

Comments
 (0)