summaryrefslogtreecommitdiff
path: root/src/api/models/messaging-message.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-02-02 08:06:01 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-02-02 08:06:01 +0900
commit9a282e37be5ba847718d198d30eb97f31d11f2a0 (patch)
tree9e1f6bda799ca3f6cc6b489a96751cb5b48f170b /src/api/models/messaging-message.ts
parentUpdate dependencies :rocket: (diff)
downloadsharkey-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.ts66
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);
+});