Endpoint for purging all objects in class (#2032)

* Endpoint for purging all objects in class

* Use deleteObjectsByQuery

* Standalone handling function and purge cache

* Change endpoint url
This commit is contained in:
Marco Cheung
2016-06-15 06:52:49 +08:00
committed by Drew
parent d9f8486790
commit b2a5092627
5 changed files with 145 additions and 1 deletions

View File

@@ -91,6 +91,16 @@ DatabaseController.prototype.collectionExists = function(className) {
return this.adapter.classExists(className);
};
DatabaseController.prototype.purgeCollection = function(className) {
return this.loadSchema()
.then((schema) => {
schema.getOneSchema(className)
})
.then((schema) => {
this.adapter.deleteObjectsByQuery(className, {}, schema);
});
};
DatabaseController.prototype.validateClassName = function(className) {
if (this.skipValidation) {
return Promise.resolve();

View File

@@ -50,6 +50,7 @@ import { SchemasRouter } from './Routers/SchemasRouter';
import { SessionsRouter } from './Routers/SessionsRouter';
import { UserController } from './Controllers/UserController';
import { UsersRouter } from './Routers/UsersRouter';
import { PurgeRouter } from './Routers/PurgeRouter';
import DatabaseController from './Controllers/DatabaseController';
const SchemaController = require('./Controllers/SchemaController');
@@ -291,6 +292,7 @@ class ParseServer {
new IAPValidationRouter(),
new FeaturesRouter(),
new GlobalConfigRouter(),
new PurgeRouter(),
];
if (process.env.PARSE_EXPERIMENTAL_HOOKS_ENABLED || process.env.TESTING) {

View File

@@ -36,7 +36,7 @@ export class FeaturesRouter extends PromiseRouter {
removeField: true,
addClass: true,
removeClass: true,
clearAllDataFromClass: false,
clearAllDataFromClass: true,
exportClass: false,
editClassLevelPermissions: true,
editPointerPermissions: true,

View File

@@ -0,0 +1,24 @@
import PromiseRouter from '../PromiseRouter';
import * as middleware from '../middlewares';
export class PurgeRouter extends PromiseRouter {
handlePurge(req) {
return req.config.database.purgeCollection(req.params.className)
.then(() => {
var cacheAdapter = req.config.cacheController;
if (req.params.className == '_Session') {
cacheAdapter.user.clear();
} else if (req.params.className == '_Role') {
cacheAdapter.role.clear();
}
return {response: {}};
});
}
mountRoutes() {
this.route('DELETE', '/purge/:className', middleware.promiseEnforceMasterKeyAccess, (req) => { return this.handlePurge(req); });
}
}
export default PurgeRouter;