summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander.sulfrian@fu-berlin.de>2016-05-31 20:03:48 +0200
committerAlexander Sulfrian <alexander.sulfrian@fu-berlin.de>2016-06-03 03:56:37 +0200
commit18b1573b25b5f387c42071d2aca0ff8b78f54a3e (patch)
tree7da11b19e3e90c9337a5126d8566a6a9345c5f45
parenta2888250f4ab3615c1590ab3bbf90302963a7c57 (diff)
downloadwekan-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.js98
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(() => {