Files
kami-parse-server/src/Controllers/LiveQueryController.js

71 lines
2.0 KiB
JavaScript
Raw Normal View History

2016-03-10 14:27:00 -08:00
import { ParseCloudCodePublisher } from '../LiveQuery/ParseCloudCodePublisher';
import { LiveQueryOptions } from '../Options';
2016-03-10 14:27:00 -08:00
export class LiveQueryController {
classNames: any;
liveQueryPublisher: any;
constructor(config: ?LiveQueryOptions) {
2016-03-10 14:27:00 -08:00
// If config is empty, we just assume no classs needs to be registered as LiveQuery
if (!config || !config.classNames) {
this.classNames = new Set();
} else if (config.classNames instanceof Array) {
const classNames = config.classNames
.map(name => new RegExp("^" + name + "$"));
this.classNames = new Set(classNames);
2016-03-10 14:27:00 -08:00
} else {
throw 'liveQuery.classes should be an array of string';
2016-03-10 14:27:00 -08:00
}
this.liveQueryPublisher = new ParseCloudCodePublisher(config);
}
onAfterSave(
className: string,
currentObject: any,
originalObject: any,
classLevelPermissions: ?any
) {
2016-03-10 14:27:00 -08:00
if (!this.hasLiveQuery(className)) {
return;
}
const req = this._makePublisherRequest(currentObject, originalObject, classLevelPermissions);
2016-03-10 14:27:00 -08:00
this.liveQueryPublisher.onCloudCodeAfterSave(req);
}
onAfterDelete(
className: string,
currentObject: any,
originalObject: any,
classLevelPermissions: any
) {
2016-03-10 14:27:00 -08:00
if (!this.hasLiveQuery(className)) {
return;
}
const req = this._makePublisherRequest(currentObject, originalObject, classLevelPermissions);
2016-03-10 14:27:00 -08:00
this.liveQueryPublisher.onCloudCodeAfterDelete(req);
}
hasLiveQuery(className: string): boolean {
for (const name of this.classNames) {
if (name.test(className)) {
return true;
}
}
return false;
2016-03-10 14:27:00 -08:00
}
_makePublisherRequest(currentObject: any, originalObject: any, classLevelPermissions: ?any): any {
2016-12-07 15:17:05 -08:00
const req = {
object: currentObject,
2016-03-10 14:27:00 -08:00
};
if (currentObject) {
req.original = originalObject;
}
if (classLevelPermissions) {
req.classLevelPermissions = classLevelPermissions;
}
2016-03-10 14:27:00 -08:00
return req;
}
}
export default LiveQueryController;