diff --git a/.meteor/packages b/.meteor/packages index a4c9a081c..ccbff63d1 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -93,3 +93,4 @@ meteorhacks:picker lamhieu:unblock meteorhacks:aggregate@1.3.0 wekan-markdown +konecty:mongo-counter diff --git a/.meteor/versions b/.meteor/versions index 8b5ff1152..13400796b 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -79,6 +79,7 @@ kadira:blaze-layout@2.3.0 kadira:dochead@1.5.0 kadira:flow-router@2.12.1 kenton:accounts-sandstorm@0.7.0 +konecty:mongo-counter@0.0.5_3 lamhieu:meteorx@2.0.1 lamhieu:unblock@1.0.0 launch-screen@1.1.1 diff --git a/models/counters.js b/models/counters.js new file mode 100644 index 000000000..232353fbe --- /dev/null +++ b/models/counters.js @@ -0,0 +1 @@ +Counters = new Mongo.Collection('counters'); diff --git a/models/org.js b/models/org.js new file mode 100644 index 000000000..cdbcbafcb --- /dev/null +++ b/models/org.js @@ -0,0 +1,121 @@ +Org = new Mongo.Collection('org'); + +/** + * A Organization in wekan + */ +Org.attachSchema( + new SimpleSchema({ + id: { + /** + * the organization id + */ + type: Number, + optional: true, + // eslint-disable-next-line consistent-return + autoValue() { + if (this.isInsert && !this.isSet) { + return incrementCounter('counters', 'org_id', 1); + } + }, + }, + version: { + /** + * the version of the organization + */ + type: Number, + optional: true, + }, + name: { + /** + * name of the organization + */ + type: String, + optional: true, + max: 190, + }, + address1: { + /** + * address1 of the organization + */ + type: String, + optional: true, + max: 255, + }, + address2: { + /** + * address2 of the organization + */ + type: String, + optional: true, + max: 255, + }, + city: { + /** + * city of the organization + */ + type: String, + optional: true, + max: 255, + }, + state: { + /** + * state of the organization + */ + type: String, + optional: true, + max: 255, + }, + zip_code: { + /** + * zip_code of the organization + */ + type: String, + optional: true, + max: 50, + }, + country: { + /** + * country of the organization + */ + type: String, + optional: true, + max: 255, + }, + billing_email: { + /** + * billing_email of the organization + */ + type: String, + optional: true, + max: 255, + }, + createdAt: { + /** + * creation date of the organization + */ + type: Date, + // eslint-disable-next-line consistent-return + autoValue() { + if (this.isInsert) { + return new Date(); + } else { + this.unset(); + } + }, + }, + modifiedAt: { + type: Date, + denyUpdate: false, + // eslint-disable-next-line consistent-return + autoValue() { + if (this.isInsert || this.isUpsert || this.isUpdate) { + return new Date(); + } else { + this.unset(); + } + }, + }, + }), +); + +export default Org; diff --git a/server/migrations.js b/server/migrations.js index f3776edd5..8b902db27 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -17,6 +17,7 @@ import Swimlanes from '../models/swimlanes'; import Triggers from '../models/triggers'; import UnsavedEdits from '../models/unsavedEdits'; import Users from '../models/users'; +import Org from '../models/org'; // Anytime you change the schema of one of the collection in a non-backward // compatible way you have to write a migration in this file using the following @@ -703,6 +704,7 @@ const firstBatchOfDbsToAddCreatedAndUpdated = [ Swimlanes, Triggers, UnsavedEdits, + Org, ]; firstBatchOfDbsToAddCreatedAndUpdated.forEach(db => { @@ -737,6 +739,7 @@ const modifiedAtTables = [ Triggers, UnsavedEdits, Users, + Org, ]; Migrations.add('add-missing-created-and-modified', () => {