Skip to content

Commit

Permalink
Schema format cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
drew-gross authored and flovilmart committed Apr 7, 2016
1 parent ef92a79 commit 325d09c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 16 deletions.
13 changes: 12 additions & 1 deletion src/Adapters/Storage/Mongo/MongoSchemaCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,20 @@ class MongoSchemaCollection {
});
}

// Add a collection. Currently the input is in mongo format, but that will change to Parse format in a
// later PR. Returns a promise that is expected to resolve with the newly created schema, in Parse format.
// If the class already exists, returns a promise that rejects with undefined as the reason. If the collection
// can't be added for a reason other than it already existing, requirements for rejection reason are TBD.
addSchema(name: string, fields) {
let mongoObject = _mongoSchemaObjectFromNameFields(name, fields);
return this._collection.insertOne(mongoObject);
return this._collection.insertOne(mongoObject)
.then(result => mongoSchemaToParseSchema(result.ops[0]))
.catch(error => {
if (error.code === 11000) { //Mongo's duplicate key error
return Promise.reject();
}
return Promise.reject(error);
});
}

updateSchema(name: string, update) {
Expand Down
28 changes: 13 additions & 15 deletions src/Schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,16 @@ function validateCLP(perms) {
});
});
}
// Valid classes must:
// Be one of _User, _Installation, _Role, _Session OR
// Be a join table OR
// Include only alpha-numeric and underscores, and not start with an underscore or number
var joinClassRegex = /^_Join:[A-Za-z0-9_]+:[A-Za-z0-9_]+/;
var classAndFieldRegex = /^[A-Za-z][A-Za-z0-9_]*$/;
function classNameIsValid(className) {
return (systemClasses.indexOf(className) > -1 ||
className === '_SCHEMA' || //TODO: remove this, as _SCHEMA is not a valid class name for storing Parse Objects.
// Valid classes must:
return (
// Be one of _User, _Installation, _Role, _Session OR
systemClasses.indexOf(className) > -1 ||
// Be a join table OR
joinClassRegex.test(className) ||
//Class names have the same constraints as field names, but also allow the previous additional names.
// Include only alpha-numeric and underscores, and not start with an underscore or number
fieldNameIsValid(className)
);
}
Expand Down Expand Up @@ -272,14 +271,13 @@ class Schema {
}

return this._collection.addSchema(className, mongoObject.result)
//TODO: Move this logic into the database adapter
.then(result => MongoSchemaCollection._TESTmongoSchemaToParseSchema(result.ops[0]))
.catch(error => {
if (error.code === 11000) { //Mongo's duplicate key error
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, `Class ${className} already exists.`);
}
return Promise.reject(error);
});
.catch(error => {
if (error === undefined) {
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, `Class ${className} already exists.`);
} else {
throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'Database adapter error.');
}
});
}

updateClass(className, submittedFields, classLevelPermissions, database) {
Expand Down

0 comments on commit 325d09c

Please sign in to comment.