From cf33e483f7e6f40e8cbbbc0118a7df70bdaf651f Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 29 Mar 2018 20:32:18 +0900 Subject: 整理した MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/messaging-message.ts | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/models/messaging-message.ts (limited to 'src/models/messaging-message.ts') 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('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} + */ +export const pack = ( + message: any, + me?: any, + options?: { + populateRecipient: boolean + } +) => new Promise(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); +}); -- cgit v1.2.3-freya