diff options
author | Alexander Sulfrian <alexander.sulfrian@fu-berlin.de> | 2016-05-31 20:03:48 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander.sulfrian@fu-berlin.de> | 2016-06-03 03:56:37 +0200 |
commit | 18b1573b25b5f387c42071d2aca0ff8b78f54a3e (patch) | |
tree | 7da11b19e3e90c9337a5126d8566a6a9345c5f45 | |
parent | a2888250f4ab3615c1590ab3bbf90302963a7c57 (diff) | |
download | wekan-18b1573b25b5f387c42071d2aca0ff8b78f54a3e.tar.gz wekan-18b1573b25b5f387c42071d2aca0ff8b78f54a3e.tar.bz2 wekan-18b1573b25b5f387c42071d2aca0ff8b78f54a3e.zip |
Meteor.users: Add SimpleSchema
Replace before.insert hook with SimpleSchema and autoValue.
-rw-r--r-- | models/users.js | 98 |
1 files changed, 90 insertions, 8 deletions
diff --git a/models/users.js b/models/users.js index 4e4a0fac..5641ec9b 100644 --- a/models/users.js +++ b/models/users.js @@ -1,5 +1,95 @@ Users = Meteor.users; +Users.attachSchema(new SimpleSchema({ + username: { + type: String, + optional: true, + autoValue() { // eslint-disable-line consistent-return + if (this.isInsert && !this.isSet) { + const name = this.field('profile.fullname'); + if (name.isSet) { + return name.value.toLowerCase().replace(/\s/g, ''); + } + } + }, + }, + emails: { + type: [Object], + optional: true, + }, + 'emails.$.address': { + type: String, + regEx: SimpleSchema.RegEx.Email, + }, + 'emails.$.verified': { + type: Boolean, + }, + createdAt: { + type: Date, + autoValue() { // eslint-disable-line consistent-return + if (this.isInsert) { + return new Date(); + } else { + this.unset(); + } + }, + }, + profile: { + type: Object, + optional: true, + autoValue() { // eslint-disable-line consistent-return + if (this.isInsert && !this.isSet) { + return {}; + } + }, + }, + 'profile.avatarUrl': { + type: String, + optional: true, + }, + 'profile.emailBuffer': { + type: [String], + optional: true, + }, + 'profile.fullname': { + type: String, + optional: true, + }, + 'profile.initials': { + type: String, + optional: true, + }, + 'profile.invitedBoards': { + type: [String], + optional: true, + }, + 'profile.language': { + type: String, + optional: true, + }, + 'profile.notifications': { + type: [String], + optional: true, + }, + 'profile.starredBoards': { + type: [String], + optional: true, + }, + 'profile.tags': { + type: [String], + optional: true, + }, + services: { + type: Object, + optional: true, + blackbox: true, + }, + heartbeat: { + type: Date, + optional: true, + }, +})); + // Search a user in the complete server database by its name or username. This // is used for instance to add a new user to a board. const searchInFields = ['username', 'profile.fullname']; @@ -259,14 +349,6 @@ if (Meteor.isServer) { }); } -Users.before.insert((userId, doc) => { - doc.profile = doc.profile || {}; - - if (!doc.username && doc.profile.name) { - doc.username = doc.profile.name.toLowerCase().replace(/\s/g, ''); - } -}); - if (Meteor.isServer) { // Let mongoDB ensure username unicity Meteor.startup(() => { |