diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-02-02 08:06:01 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-02-02 08:06:01 +0900 |
| commit | 9a282e37be5ba847718d198d30eb97f31d11f2a0 (patch) | |
| tree | 9e1f6bda799ca3f6cc6b489a96751cb5b48f170b /src/api/models/messaging-message.ts | |
| parent | Update dependencies :rocket: (diff) | |
| download | sharkey-9a282e37be5ba847718d198d30eb97f31d11f2a0.tar.gz sharkey-9a282e37be5ba847718d198d30eb97f31d11f2a0.tar.bz2 sharkey-9a282e37be5ba847718d198d30eb97f31d11f2a0.zip | |
wip
Diffstat (limited to 'src/api/models/messaging-message.ts')
| -rw-r--r-- | src/api/models/messaging-message.ts | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/src/api/models/messaging-message.ts b/src/api/models/messaging-message.ts index 18afa57e44..ffdda1db21 100644 --- a/src/api/models/messaging-message.ts +++ b/src/api/models/messaging-message.ts @@ -1,7 +1,12 @@ 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'; -export default db.get('messaging_messages') as any; // fuck type definition +const MessagingMessage = db.get<IMessagingMessage>('messaging_messages'); +export default MessagingMessage; export interface IMessagingMessage { _id: mongo.ObjectID; @@ -10,3 +15,62 @@ export interface IMessagingMessage { 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.user_id, me); + + if (_message.file) { + // Populate file + _message.file = await packFile(_message.file_id); + } + + if (opts.populateRecipient) { + // Populate recipient + _message.recipient = await packUser(_message.recipient_id, me); + } + + resolve(_message); +}); |