diff options
Diffstat (limited to 'src/server/api/endpoints/messaging')
| -rw-r--r-- | src/server/api/endpoints/messaging/messages.ts | 86 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/create.ts | 46 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/read.ts | 8 |
3 files changed, 79 insertions, 61 deletions
diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts index dec0638eed..43d96e2ee4 100644 --- a/src/server/api/endpoints/messaging/messages.ts +++ b/src/server/api/endpoints/messaging/messages.ts @@ -1,8 +1,9 @@ -import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import Message from '../../../../models/messaging-message'; import User, { ILocalUser } from '../../../../models/user'; import { pack } from '../../../../models/messaging-message'; import read from '../../common/read-messaging-message'; +import getParams from '../../get-params'; export const meta = { desc: { @@ -12,17 +13,48 @@ export const meta = { requireCredential: true, - kind: 'messaging-read' + kind: 'messaging-read', + + params: { + userId: { + validator: $.type(ID), + transform: transform, + }, + + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, + + sinceId: { + validator: $.type(ID).optional, + transform: transform, + }, + + untilId: { + validator: $.type(ID).optional, + transform: transform, + }, + + markAsRead: { + validator: $.bool.optional, + default: true + } + } }; export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'userId' parameter - const [recipientId, recipientIdErr] = $.type(ID).get(params.userId); - if (recipientIdErr) return rej('invalid userId param'); + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); + + // Check if both of sinceId and untilId is specified + if (ps.sinceId && ps.untilId) { + return rej('cannot set sinceId and untilId'); + } // Fetch recipient const recipient = await User.findOne({ - _id: recipientId + _id: ps.userId }, { fields: { _id: true @@ -33,27 +65,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = return rej('user not found'); } - // Get 'markAsRead' parameter - const [markAsRead = true, markAsReadErr] = $.bool.optional.get(params.markAsRead); - if (markAsReadErr) return rej('invalid markAsRead param'); - - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); - - // Get 'sinceId' parameter - const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId); - if (sinceIdErr) return rej('invalid sinceId param'); - - // Get 'untilId' parameter - const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId); - if (untilIdErr) return rej('invalid untilId param'); - - // Check if both of sinceId and untilId is specified - if (sinceId && untilId) { - return rej('cannot set sinceId and untilId'); - } - const query = { $or: [{ userId: user._id, @@ -68,36 +79,33 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = _id: -1 }; - if (sinceId) { + if (ps.sinceId) { sort._id = 1; query._id = { - $gt: sinceId + $gt: ps.sinceId }; - } else if (untilId) { + } else if (ps.untilId) { query._id = { - $lt: untilId + $lt: ps.untilId }; } - // Issue query const messages = await Message .find(query, { - limit: limit, + limit: ps.limit, sort: sort }); - // Serialize - res(await Promise.all(messages.map(async message => - await pack(message, user, { - populateRecipient: false - })))); + res(await Promise.all(messages.map(message => pack(message, user, { + populateRecipient: false + })))); if (messages.length === 0) { return; } // Mark all as read - if (markAsRead) { + if (ps.markAsRead) { read(user._id, recipient._id, messages); } }); diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts index cb115cf987..ff44e192d1 100644 --- a/src/server/api/endpoints/messaging/messages/create.ts +++ b/src/server/api/endpoints/messaging/messages/create.ts @@ -1,4 +1,4 @@ -import $ from 'cafy'; import ID from '../../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../../misc/cafy-id'; import Message from '../../../../../models/messaging-message'; import { isValidText } from '../../../../../models/messaging-message'; import History from '../../../../../models/messaging-history'; @@ -9,6 +9,7 @@ import { pack } from '../../../../../models/messaging-message'; import { publishMainStream } from '../../../../../stream'; import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream'; import pushSw from '../../../../../push-sw'; +import getParams from '../../../get-params'; export const meta = { desc: { @@ -18,22 +19,37 @@ export const meta = { requireCredential: true, - kind: 'messaging-write' + kind: 'messaging-write', + + params: { + userId: { + validator: $.type(ID), + transform: transform, + }, + + text: { + validator: $.str.optional.pipe(isValidText) + }, + + fileId: { + validator: $.type(ID).optional, + transform: transform, + } + } }; export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'userId' parameter - const [recipientId, recipientIdErr] = $.type(ID).get(params.userId); - if (recipientIdErr) return rej('invalid userId param'); + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Myself - if (recipientId.equals(user._id)) { + if (ps.userId.equals(user._id)) { return rej('cannot send message to myself'); } // Fetch recipient const recipient = await User.findOne({ - _id: recipientId + _id: ps.userId }, { fields: { _id: true @@ -44,18 +60,10 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = return rej('user not found'); } - // Get 'text' parameter - const [text, textErr] = $.str.optional.pipe(isValidText).get(params.text); - if (textErr) return rej('invalid text'); - - // Get 'fileId' parameter - const [fileId, fileIdErr] = $.type(ID).optional.get(params.fileId); - if (fileIdErr) return rej('invalid fileId param'); - let file = null; - if (fileId !== undefined) { + if (ps.fileId != null) { file = await DriveFile.findOne({ - _id: fileId, + _id: ps.fileId, 'metadata.userId': user._id }); @@ -65,7 +73,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = } // テキストが無いかつ添付ファイルも無かったらエラー - if (text === undefined && file === null) { + if (ps.text == null && file == null) { return rej('text or file is required'); } @@ -74,7 +82,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = createdAt: new Date(), fileId: file ? file._id : undefined, recipientId: recipient._id, - text: text ? text.trim() : undefined, + text: ps.text ? ps.text.trim() : undefined, userId: user._id, isRead: false }); diff --git a/src/server/api/endpoints/messaging/messages/read.ts b/src/server/api/endpoints/messaging/messages/read.ts index 1c0bdf5230..122034fdf0 100644 --- a/src/server/api/endpoints/messaging/messages/read.ts +++ b/src/server/api/endpoints/messaging/messages/read.ts @@ -1,4 +1,4 @@ -import $ from 'cafy'; import ID from '../../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../../misc/cafy-id'; import Message from '../../../../../models/messaging-message'; import { ILocalUser } from '../../../../../models/user'; import read from '../../../common/read-messaging-message'; @@ -15,12 +15,14 @@ export const meta = { kind: 'messaging-write', params: { - messageId: $.type(ID).note({ + messageId: { + validator: $.type(ID), + transform: transform, desc: { 'ja-JP': '既読にするメッセージのID', 'en-US': 'The ID of a message that you want to mark as read' } - }) + } } }; |