summaryrefslogtreecommitdiff
path: root/src/models/messaging-message.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/messaging-message.ts')
-rw-r--r--src/models/messaging-message.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/models/messaging-message.ts b/src/models/messaging-message.ts
new file mode 100644
index 0000000000..8bee657c34
--- /dev/null
+++ b/src/models/messaging-message.ts
@@ -0,0 +1,82 @@
+import * as mongo from 'mongodb';
+import deepcopy = require('deepcopy');
+import { pack as packUser } from './user';
+import { pack as packFile } from './drive-file';
+import db from '../db/mongodb';
+import parse from '../common/text';
+
+const MessagingMessage = db.get<IMessagingMessage>('messagingMessages');
+export default MessagingMessage;
+
+export interface IMessagingMessage {
+ _id: mongo.ObjectID;
+ createdAt: Date;
+ text: string;
+ userId: mongo.ObjectID;
+ recipientId: mongo.ObjectID;
+ isRead: boolean;
+ fileId: mongo.ObjectID;
+}
+
+export function isValidText(text: string): boolean {
+ return text.length <= 1000 && text.trim() != '';
+}
+
+/**
+ * Pack a messaging message for API response
+ *
+ * @param {any} message
+ * @param {any} me?
+ * @param {any} options?
+ * @return {Promise<any>}
+ */
+export const pack = (
+ message: any,
+ me?: any,
+ options?: {
+ populateRecipient: boolean
+ }
+) => new Promise<any>(async (resolve, reject) => {
+ const opts = options || {
+ populateRecipient: true
+ };
+
+ let _message: any;
+
+ // Populate the message if 'message' is ID
+ if (mongo.ObjectID.prototype.isPrototypeOf(message)) {
+ _message = await MessagingMessage.findOne({
+ _id: message
+ });
+ } else if (typeof message === 'string') {
+ _message = await MessagingMessage.findOne({
+ _id: new mongo.ObjectID(message)
+ });
+ } else {
+ _message = deepcopy(message);
+ }
+
+ // Rename _id to id
+ _message.id = _message._id;
+ delete _message._id;
+
+ // Parse text
+ if (_message.text) {
+ _message.ast = parse(_message.text);
+ }
+
+ // Populate user
+ _message.user = await packUser(_message.userId, me);
+
+ if (_message.fileId) {
+ // Populate file
+ _message.file = await packFile(_message.fileId);
+ }
+
+ if (opts.populateRecipient) {
+ // Populate recipient
+ _message.recipient = await packUser(_message.recipientId, me);
+ }
+
+ resolve(_message);
+});