Move rocketchat models (#13027)

* Move rocketchat settings to specific package

* WIP: Move models from rocketchat-lib to a specific package (server)

* Move function from rocketchat:lib to rocketchat:utils to use it in rocketchat:models

* Move client models from rocketchat:lib to rocketchat:models

* Fix lint

* Simplify model files

* Fix wrong object assign
pull/13114/head
Marcos Spessatto Defendi 6 years ago committed by Rodrigo Nascimento
parent 454008524d
commit c6ef5e7b32
  1. 3
      .meteor/packages
  2. 1
      .meteor/versions
  3. 6
      packages/rocketchat-lib/client/models/Avatars.js
  4. 7
      packages/rocketchat-lib/client/models/Uploads.js
  5. 6
      packages/rocketchat-lib/client/models/UserDataFiles.js
  6. 11
      packages/rocketchat-lib/client/models/index.js
  7. 32
      packages/rocketchat-lib/lib/getDefaultSubscriptionPref.js
  8. 17
      packages/rocketchat-lib/package.js
  9. 25
      packages/rocketchat-lib/server/models/index.js
  10. 11
      packages/rocketchat-models/client/index.js
  11. 10
      packages/rocketchat-models/client/models/Avatars.js
  12. 10
      packages/rocketchat-models/client/models/Uploads.js
  13. 10
      packages/rocketchat-models/client/models/UserDataFiles.js
  14. 4
      packages/rocketchat-models/client/models/_Base.js
  15. 17
      packages/rocketchat-models/package.js
  16. 27
      packages/rocketchat-models/server/index.js
  17. 7
      packages/rocketchat-models/server/models/Avatars.js
  18. 7
      packages/rocketchat-models/server/models/ExportOperations.js
  19. 24
      packages/rocketchat-models/server/models/Messages.js
  20. 7
      packages/rocketchat-models/server/models/Reports.js
  21. 15
      packages/rocketchat-models/server/models/Rooms.js
  22. 6
      packages/rocketchat-models/server/models/Settings.js
  23. 17
      packages/rocketchat-models/server/models/Subscriptions.js
  24. 7
      packages/rocketchat-models/server/models/Uploads.js
  25. 7
      packages/rocketchat-models/server/models/UserDataFiles.js
  26. 11
      packages/rocketchat-models/server/models/Users.js
  27. 12
      packages/rocketchat-models/server/models/_Base.js
  28. 9
      packages/rocketchat-models/server/models/_BaseDb.js
  29. 2
      packages/rocketchat-utils/client/index.js
  30. 31
      packages/rocketchat-utils/lib/getDefaultSubscriptionPref.js
  31. 2
      packages/rocketchat-utils/server/index.js

@ -202,4 +202,5 @@ rocketchat:mailmessages
juliancwirko:postcss
littledata:synced-cron
rocketchat:utils
rocketchat:settings
rocketchat:settings
rocketchat:models

@ -201,6 +201,7 @@ rocketchat:message-pin@0.0.1
rocketchat:message-snippet@0.0.1
rocketchat:message-star@0.0.1
rocketchat:migrations@0.0.1
rocketchat:models@1.0.0
rocketchat:monitoring@2.30.2_3
rocketchat:nrr@1.0.0
rocketchat:oauth2-server@2.0.0

@ -1,6 +0,0 @@
RocketChat.models.Avatars = new class extends RocketChat.models._Base {
constructor() {
super();
this._initModel('avatars');
}
};

@ -1,7 +0,0 @@
RocketChat.models.Uploads = new class extends RocketChat.models._Base {
constructor() {
super();
this._initModel('uploads');
}
};

@ -1,6 +0,0 @@
RocketChat.models.UserDataFiles = new class extends RocketChat.models._Base {
constructor() {
super();
this._initModel('userDataFiles');
}
};

@ -0,0 +1,11 @@
import { Avatars } from 'meteor/rocketchat:models';
import { Base as _Base } from 'meteor/rocketchat:models';
import { Uploads } from 'meteor/rocketchat:models';
import { UserDataFiles } from 'meteor/rocketchat:models';
Object.assign(RocketChat.models, {
_Base,
Avatars,
Uploads,
UserDataFiles,
});

@ -1,31 +1,3 @@
RocketChat.getDefaultSubscriptionPref = function _getDefaultSubscriptionPref(userPref) {
const subscription = {};
import { getDefaultSubscriptionPref } from 'meteor/rocketchat:utils';
const {
desktopNotifications,
mobileNotifications,
emailNotificationMode,
highlights,
} = (userPref.settings && userPref.settings.preferences) || {};
if (Array.isArray(highlights) && highlights.length) {
subscription.userHighlights = highlights;
}
if (desktopNotifications && desktopNotifications !== 'default') {
subscription.desktopNotifications = desktopNotifications;
subscription.desktopPrefOrigin = 'user';
}
if (mobileNotifications && mobileNotifications !== 'default') {
subscription.mobilePushNotifications = mobileNotifications;
subscription.mobilePrefOrigin = 'user';
}
if (emailNotificationMode && emailNotificationMode !== 'default') {
subscription.emailNotifications = emailNotificationMode;
subscription.emailPrefOrigin = 'user';
}
return subscription;
};
RocketChat.getDefaultSubscriptionPref = getDefaultSubscriptionPref;

@ -25,6 +25,7 @@ Package.onUse(function(api) {
api.use('service-configuration');
api.use('check');
api.use('rocketchat:utils');
api.use('rocketchat:models');
api.use('rocketchat:accounts');
api.use('modules');
api.use('rocketchat:i18n');
@ -134,17 +135,7 @@ Package.onUse(function(api) {
api.addFiles('server/lib/passwordPolicy.js', 'server');
// SERVER MODELS
api.addFiles('server/models/_Base.js', 'server');
api.addFiles('server/models/Avatars.js', 'server');
api.addFiles('server/models/Messages.js', 'server');
api.addFiles('server/models/Reports.js', 'server');
api.addFiles('server/models/Rooms.js', 'server');
api.addFiles('server/models/Settings.js', 'server');
api.addFiles('server/models/Subscriptions.js', 'server');
api.addFiles('server/models/Uploads.js', 'server');
api.addFiles('server/models/Users.js', 'server');
api.addFiles('server/models/ExportOperations.js', 'server');
api.addFiles('server/models/UserDataFiles.js', 'server');
api.addFiles('server/models/index.js', 'server');
api.addFiles('server/oauth/oauth.js', 'server');
api.addFiles('server/oauth/facebook.js', 'server');
@ -243,9 +234,7 @@ Package.onUse(function(api) {
api.addFiles('client/CustomTranslations.js', 'client');
// CLIENT MODELS
api.addFiles('client/models/_Base.js', 'client');
api.addFiles('client/models/Avatars.js', 'client');
api.addFiles('client/models/Uploads.js', 'client');
api.addFiles('client/models/index.js', 'client');
// CLIENT VIEWS
api.addFiles('client/views/customFieldsForm.html', 'client');

@ -0,0 +1,25 @@
import { Avatars } from 'meteor/rocketchat:models';
import { Base as _Base } from 'meteor/rocketchat:models';
import { ExportOperations } from 'meteor/rocketchat:models';
import { Messages } from 'meteor/rocketchat:models';
import { Reports } from 'meteor/rocketchat:models';
import { Rooms } from 'meteor/rocketchat:models';
import { Settings } from 'meteor/rocketchat:models';
import { Subscriptions } from 'meteor/rocketchat:models';
import { Uploads } from 'meteor/rocketchat:models';
import { UserDataFiles } from 'meteor/rocketchat:models';
import { Users } from 'meteor/rocketchat:models';
Object.assign(RocketChat.models, {
_Base,
Avatars,
ExportOperations,
Messages,
Reports,
Rooms,
Settings,
Subscriptions,
Uploads,
UserDataFiles,
Users,
});

@ -0,0 +1,11 @@
import { Base } from './models/_Base';
import Avatars from './models/Avatars';
import Uploads from './models/Uploads';
import UserDataFiles from './models/UserDataFiles';
export {
Base,
Avatars,
Uploads,
UserDataFiles,
};

@ -0,0 +1,10 @@
import { Base } from './_Base';
export class Avatars extends Base {
constructor() {
super();
this._initModel('avatars');
}
}
export default new Avatars();

@ -0,0 +1,10 @@
import { Base } from './_Base';
export class Uploads extends Base {
constructor() {
super();
this._initModel('uploads');
}
}
export default new Uploads();

@ -0,0 +1,10 @@
import { Base } from './_Base';
export class UserDataFiles extends Base {
constructor() {
super();
this._initModel('userDataFiles');
}
}
export default new UserDataFiles();

@ -1,7 +1,7 @@
import { check } from 'meteor/check';
import { Mongo } from 'meteor/mongo';
RocketChat.models._Base = class {
export class Base {
_baseName() {
return 'rocketchat_';
@ -52,4 +52,4 @@ RocketChat.models._Base = class {
tryDropIndex() {}
};
}

@ -0,0 +1,17 @@
Package.describe({
name: 'rocketchat:models',
summary: 'RocketChat Models',
version: '1.0.0',
git: '',
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'rocketchat:settings',
'rocketchat:utils',
'konecty:multiple-instances-status',
]);
api.mainModule('client/index.js', 'client');
api.mainModule('server/index.js', 'server');
});

@ -0,0 +1,27 @@
import { Base } from './models/_Base';
import { BaseDb } from './models/_BaseDb';
import Avatars from './models/Avatars';
import ExportOperations from './models/ExportOperations';
import Messages from './models/Messages';
import Reports from './models/Reports';
import Rooms from './models/Rooms';
import Settings from './models/Settings';
import Subscriptions from './models/Subscriptions';
import Uploads from './models/Uploads';
import UserDataFiles from './models/UserDataFiles';
import Users from './models/Users';
export {
Base,
BaseDb,
Avatars,
ExportOperations,
Messages,
Reports,
Rooms,
Settings,
Subscriptions,
Uploads,
UserDataFiles,
Users,
};

@ -1,8 +1,9 @@
import _ from 'underscore';
import s from 'underscore.string';
import { InstanceStatus } from 'meteor/konecty:multiple-instances-status';
import { Base } from './_Base';
RocketChat.models.Avatars = new class extends RocketChat.models._Base {
export class Avatars extends Base {
constructor() {
super('avatars');
@ -110,4 +111,6 @@ RocketChat.models.Avatars = new class extends RocketChat.models._Base {
return this.remove({ _id: fileId });
}
}
};
}
export default new Avatars();

@ -1,6 +1,7 @@
import { Base } from './_Base';
import _ from 'underscore';
RocketChat.models.ExportOperations = new class ModelExportOperations extends RocketChat.models._Base {
export class ExportOperations extends Base {
constructor() {
super('export_operations');
@ -75,4 +76,6 @@ RocketChat.models.ExportOperations = new class ModelExportOperations extends Roc
removeById(_id) {
return this.remove(_id);
}
};
}
export default new ExportOperations();

@ -1,8 +1,12 @@
import { Meteor } from 'meteor/meteor';
import { Match } from 'meteor/check';
import { settings } from 'meteor/rocketchat:settings';
import { Base } from './_Base';
import Rooms from './Rooms';
import Users from './Users';
import _ from 'underscore';
RocketChat.models.Messages = new class extends RocketChat.models._Base {
export class Messages extends Base {
constructor() {
super('message');
@ -366,7 +370,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
}
cloneAndSaveAsHistoryById(_id) {
const me = RocketChat.models.Users.findOneById(Meteor.userId());
const me = Users.findOneById(Meteor.userId());
const record = this.findOneById(_id);
record._hidden = true;
record.parent = record._id;
@ -580,7 +584,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
// INSERT
createWithTypeRoomIdMessageAndUser(type, roomId, message, user, extraData) {
const room = RocketChat.models.Rooms.findOneById(roomId, { fields: { sysMes: 1 } });
const room = Rooms.findOneById(roomId, { fields: { sysMes: 1 } });
if ((room != null ? room.sysMes : undefined) === false) {
return;
}
@ -596,20 +600,20 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
groupable: false,
};
if (RocketChat.settings.get('Message_Read_Receipt_Enabled')) {
if (settings.get('Message_Read_Receipt_Enabled')) {
record.unread = true;
}
_.extend(record, extraData);
record._id = this.insertOrUpsert(record);
RocketChat.models.Rooms.incMsgCountById(room._id, 1);
Rooms.incMsgCountById(room._id, 1);
return record;
}
createNavigationHistoryWithRoomIdMessageAndUser(roomId, message, user, extraData) {
const type = 'livechat_navigation_history';
const room = RocketChat.models.Rooms.findOneById(roomId, { fields: { sysMes: 1 } });
const room = Rooms.findOneById(roomId, { fields: { sysMes: 1 } });
if ((room != null ? room.sysMes : undefined) === false) {
return;
}
@ -625,7 +629,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
groupable: false,
};
if (RocketChat.settings.get('Message_Read_Receipt_Enabled')) {
if (settings.get('Message_Read_Receipt_Enabled')) {
record.unread = true;
}
@ -753,7 +757,7 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
query['u.username'] = { $in: users };
}
const messagesToDelete = RocketChat.models.Messages.find(query, {
const messagesToDelete = this.find(query, {
fields: {
_id: 1,
},
@ -830,4 +834,6 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base {
},
});
}
};
}
export default new Messages();

@ -1,6 +1,7 @@
import { Base } from './_Base';
import _ from 'underscore';
RocketChat.models.Reports = new class extends RocketChat.models._Base {
export class Reports extends Base {
constructor() {
super('reports');
}
@ -15,4 +16,6 @@ RocketChat.models.Reports = new class extends RocketChat.models._Base {
record._id = this.insert(record);
return record;
}
};
}
export default new Reports();

@ -1,7 +1,10 @@
import { Base } from './_Base';
import Messages from './Messages';
import Subscriptions from './Subscriptions';
import _ from 'underscore';
import s from 'underscore.string';
class ModelRooms extends RocketChat.models._Base {
export class Rooms extends Base {
constructor(...args) {
super(...args);
@ -103,7 +106,7 @@ class ModelRooms extends RocketChat.models._Base {
}
findBySubscriptionUserId(userId, options) {
const data = RocketChat.models.Subscriptions.findByUserId(userId, { fields: { rid: 1 } }).fetch()
const data = Subscriptions.findByUserId(userId, { fields: { rid: 1 } }).fetch()
.map((item) => item.rid);
const query = {
@ -116,7 +119,7 @@ class ModelRooms extends RocketChat.models._Base {
}
findBySubscriptionTypeAndUserId(type, userId, options) {
const data = RocketChat.models.Subscriptions.findByUserIdAndType(userId, type, { fields: { rid: 1 } }).fetch()
const data = Subscriptions.findByUserIdAndType(userId, type, { fields: { rid: 1 } }).fetch()
.map((item) => item.rid);
const query = {
@ -130,7 +133,7 @@ class ModelRooms extends RocketChat.models._Base {
}
findBySubscriptionUserIdUpdatedAfter(userId, _updatedAt, options) {
const ids = RocketChat.models.Subscriptions.findByUserId(userId, { fields: { rid: 1 } }).fetch()
const ids = Subscriptions.findByUserId(userId, { fields: { rid: 1 } }).fetch()
.map((item) => item.rid);
const query = {
@ -446,7 +449,7 @@ class ModelRooms extends RocketChat.models._Base {
resetLastMessageById(_id, messageId) {
const query = { _id };
const lastMessage = RocketChat.models.Messages.getLastVisibleMessageSentWithNoTypeByRoomId(_id, messageId);
const lastMessage = Messages.getLastVisibleMessageSentWithNoTypeByRoomId(_id, messageId);
const update = lastMessage ? {
$set: {
@ -803,4 +806,4 @@ class ModelRooms extends RocketChat.models._Base {
}
}
RocketChat.models.Rooms = new ModelRooms('room', true);
export default new Rooms('rooms', true);

@ -1,4 +1,6 @@
class ModelSettings extends RocketChat.models._Base {
import { Base } from './_Base';
export class Settings extends Base {
constructor(...args) {
super(...args);
@ -179,4 +181,4 @@ class ModelSettings extends RocketChat.models._Base {
}
}
RocketChat.models.Settings = new ModelSettings('settings', true);
export default new Settings('settings', true);

@ -1,6 +1,9 @@
import { Base } from './_Base';
import { Match } from 'meteor/check';
import Rooms from './Rooms';
import { getDefaultSubscriptionPref } from 'meteor/rocketchat:utils';
class ModelSubscriptions extends RocketChat.models._Base {
export class Subscriptions extends Base {
constructor(...args) {
super(...args);
@ -788,13 +791,13 @@ class ModelSubscriptions extends RocketChat.models._Base {
username: user.username,
name: user.name,
},
...RocketChat.getDefaultSubscriptionPref(user),
...getDefaultSubscriptionPref(user),
...extraData,
};
const result = this.insert(subscription);
RocketChat.models.Rooms.incUsersCountById(room._id);
Rooms.incUsersCountById(room._id);
return result;
}
@ -811,7 +814,7 @@ class ModelSubscriptions extends RocketChat.models._Base {
const result = this.remove(query);
if (Match.test(result, Number) && result > 0) {
RocketChat.models.Rooms.incUsersCountByIds(roomIds, -1);
Rooms.incUsersCountByIds(roomIds, -1);
}
return result;
@ -825,7 +828,7 @@ class ModelSubscriptions extends RocketChat.models._Base {
const result = this.remove(query);
if (Match.test(result, Number) && result > 0) {
RocketChat.models.Rooms.incUsersCountById(roomId, - result);
Rooms.incUsersCountById(roomId, - result);
}
return result;
@ -840,11 +843,11 @@ class ModelSubscriptions extends RocketChat.models._Base {
const result = this.remove(query);
if (Match.test(result, Number) && result > 0) {
RocketChat.models.Rooms.incUsersCountById(roomId, - result);
Rooms.incUsersCountById(roomId, - result);
}
return result;
}
}
RocketChat.models.Subscriptions = new ModelSubscriptions('subscription', true);
export default new Subscriptions('subscription', true);

@ -1,8 +1,9 @@
import _ from 'underscore';
import s from 'underscore.string';
import { InstanceStatus } from 'meteor/konecty:multiple-instances-status';
import { Base } from './_Base';
RocketChat.models.Uploads = new class extends RocketChat.models._Base {
export class Uploads extends Base {
constructor() {
super('uploads');
@ -107,4 +108,6 @@ RocketChat.models.Uploads = new class extends RocketChat.models._Base {
return this.remove({ _id: fileId });
}
}
};
}
export default new Uploads();

@ -1,6 +1,7 @@
import { Base } from './_Base';
import _ from 'underscore';
RocketChat.models.UserDataFiles = new class ModelUserDataFiles extends RocketChat.models._Base {
export class UserDataFiles extends Base {
constructor() {
super('user_data_files');
@ -37,4 +38,6 @@ RocketChat.models.UserDataFiles = new class ModelUserDataFiles extends RocketCha
removeById(_id) {
return this.remove(_id);
}
};
}
export default new UserDataFiles();

@ -1,9 +1,12 @@
import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
import { settings } from 'meteor/rocketchat:settings';
import { Base } from './_Base';
import Subscriptions from './Subscriptions';
import _ from 'underscore';
import s from 'underscore.string';
class ModelUsers extends RocketChat.models._Base {
export class Users extends Base {
constructor(...args) {
super(...args);
@ -83,7 +86,7 @@ class ModelUsers extends RocketChat.models._Base {
}
findByRoomId(rid, options) {
const data = RocketChat.models.Subscriptions.findByRoomId(rid).fetch().map((item) => item.u._id);
const data = Subscriptions.findByRoomId(rid).fetch().map((item) => item.u._id);
const query = {
_id: {
$in: data,
@ -140,7 +143,7 @@ class ModelUsers extends RocketChat.models._Base {
const termRegex = new RegExp(s.escapeRegExp(searchTerm), 'i');
const orStmt = _.reduce(RocketChat.settings.get('Accounts_SearchFields').trim().split(','), function(acc, el) {
const orStmt = _.reduce(settings.get('Accounts_SearchFields').trim().split(','), function(acc, el) {
acc.push({ [el.trim()]: termRegex });
return acc;
}, []);
@ -666,4 +669,4 @@ Find users to send a message by email if:
}
}
RocketChat.models.Users = new ModelUsers(Meteor.users, true);
export default new Users(Meteor.users, true);

@ -1,11 +1,11 @@
import { check } from 'meteor/check';
import ModelsBaseDb from './_BaseDb';
import { BaseDb } from './_BaseDb';
import objectPath from 'object-path';
import _ from 'underscore';
class ModelsBase {
export class Base {
constructor(nameOrModel) {
this._db = new ModelsBaseDb(nameOrModel, this);
this._db = new BaseDb(nameOrModel, this);
this.model = this._db.model;
this.collectionName = this._db.collectionName;
this.name = this._db.name;
@ -128,6 +128,10 @@ class ModelsBase {
return this._db.trashFindDeletedAfter(...args);
}
trashFindDeleted(...args) {
return this._db.trashFindDeleted(...args);
}
processQueryOptionsOnResult(result, options = {}) {
if (result === undefined || result === null) {
return undefined;
@ -277,5 +281,3 @@ class ModelsBase {
// }
}
RocketChat.models._Base = ModelsBase;

@ -1,9 +1,10 @@
import { Match } from 'meteor/check';
import { Mongo, MongoInternals } from 'meteor/mongo';
import { settings } from 'meteor/rocketchat:settings';
import _ from 'underscore';
import { EventEmitter } from 'events';
const baseName = 'rocketchat_';
import { EventEmitter } from 'events';
const trash = new Mongo.Collection(`${ baseName }_trash`);
try {
@ -15,11 +16,11 @@ try {
const isOplogAvailable = MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle && !!MongoInternals.defaultRemoteCollectionDriver().mongo._oplogHandle.onOplogEntry;
let isOplogEnabled = isOplogAvailable;
RocketChat.settings.get('Force_Disable_OpLog_For_Cache', (key, value) => {
settings.get('Force_Disable_OpLog_For_Cache', (key, value) => {
isOplogEnabled = isOplogAvailable && value === false;
});
class ModelsBaseDb extends EventEmitter {
export class BaseDb extends EventEmitter {
constructor(model, baseModel) {
super();
@ -377,5 +378,3 @@ class ModelsBaseDb extends EventEmitter {
return trash.find(query, options);
}
}
export default ModelsBaseDb;

@ -1,9 +1,11 @@
import { t, isRtl } from '../lib/tapi18n';
import { isChrome, isFirefox } from './lib/browsers';
import { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref';
export {
t,
isRtl,
isChrome,
isFirefox,
getDefaultSubscriptionPref,
};

@ -0,0 +1,31 @@
export const getDefaultSubscriptionPref = (userPref) => {
const subscription = {};
const {
desktopNotifications,
mobileNotifications,
emailNotificationMode,
highlights,
} = (userPref.settings && userPref.settings.preferences) || {};
if (Array.isArray(highlights) && highlights.length) {
subscription.userHighlights = highlights;
}
if (desktopNotifications && desktopNotifications !== 'default') {
subscription.desktopNotifications = desktopNotifications;
subscription.desktopPrefOrigin = 'user';
}
if (mobileNotifications && mobileNotifications !== 'default') {
subscription.mobilePushNotifications = mobileNotifications;
subscription.mobilePrefOrigin = 'user';
}
if (emailNotificationMode && emailNotificationMode !== 'default') {
subscription.emailNotifications = emailNotificationMode;
subscription.emailPrefOrigin = 'user';
}
return subscription;
};

@ -1,6 +1,8 @@
import { t, isRtl } from '../lib/tapi18n';
import { getDefaultSubscriptionPref } from '../lib/getDefaultSubscriptionPref';
export {
t,
isRtl,
getDefaultSubscriptionPref,
};

Loading…
Cancel
Save