This commit is contained in:
syuilo 2017-03-03 08:24:48 +09:00
parent 67f9c158d7
commit 2a9cba25a8
9 changed files with 77 additions and 126 deletions

View file

@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import History from '../../models/messaging-history';
import serialize from '../../serializers/messaging-message';
@ -18,17 +18,8 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// Get history
const history = await History

View file

@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import Message from '../../models/messaging-message';
import User from '../../models/user';
import serialize from '../../serializers/messaging-message';
@ -21,10 +21,12 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'user_id' parameter
let recipient = params.user_id;
if (recipient !== undefined && recipient !== null) {
recipient = await User.findOne({
_id: new mongo.ObjectID(recipient)
const [recipientId, recipientIdErr] = it(params.user_id).expect.id().required().qed();
if (recipientIdErr) return rej('invalid user_id param');
// Fetch recipient
const recipient = await User.findOne({
_id: recipientId
}, {
fields: {
_id: true
@ -34,34 +36,25 @@ module.exports = (params, user) =>
if (recipient === null) {
return rej('user not found');
}
} else {
return rej('user_id is required');
}
// Get 'mark_as_read' parameter
let markAsRead = params.mark_as_read;
if (markAsRead == null) {
markAsRead = true;
}
const [markAsRead, markAsReadErr] = it(params.mark_as_read).expect.boolean().default(true).qed();
if (markAsReadErr) return rej('invalid mark_as_read param');
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
// Get 'since_id' parameter
const [sinceId, sinceIdErr] = it(params.since_id).expect.id().qed();
if (sinceIdErr) return rej('invalid since_id param');
const since = params.since_id || null;
const max = params.max_id || null;
// Get 'max_id' parameter
const [maxId, maxIdErr] = it(params.max_id).expect.id().qed();
if (maxIdErr) return rej('invalid max_id param');
// Check if both of since_id and max_id is specified
if (since !== null && max !== null) {
if (sinceId !== null && maxId !== null) {
return rej('cannot set since_id and max_id');
}
@ -73,20 +66,20 @@ module.exports = (params, user) =>
user_id: recipient._id,
recipient_id: user._id
}]
};
} as any;
const sort = {
_id: -1
};
if (since !== null) {
if (sinceId) {
sort._id = 1;
query._id = {
$gt: new mongo.ObjectID(since)
$gt: sinceId
};
} else if (max !== null) {
} else if (maxId) {
query._id = {
$lt: new mongo.ObjectID(max)
$lt: maxId
};
}

View file

@ -3,8 +3,9 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../../it';
import Message from '../../../models/messaging-message';
import { isValidText } from '../../../models/messaging-message';
import History from '../../../models/messaging-history';
import User from '../../../models/user';
import DriveFile from '../../../models/drive-file';
@ -13,11 +14,6 @@ import publishUserStream from '../../../event';
import { publishMessagingStream } from '../../../event';
import config from '../../../../conf';
/**
*
*/
const maxTextLength = 500;
/**
* Create a message
*
@ -29,24 +25,17 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'user_id' parameter
let recipient = params.user_id;
if (recipient !== undefined && recipient !== null) {
if (typeof recipient != 'string') {
return rej('user_id must be a string');
}
// Validate id
if (!mongo.ObjectID.isValid(recipient)) {
return rej('incorrect user_id');
}
const [recipientId, recipientIdErr] = it(params.user_id).expect.id().required().qed();
if (recipientIdErr) return rej('invalid user_id param');
// Myself
if (new mongo.ObjectID(recipient).equals(user._id)) {
if (recipientId.equals(user._id)) {
return rej('cannot send message to myself');
}
recipient = await User.findOne({
_id: new mongo.ObjectID(recipient)
// Fetch recipient
const recipient = await User.findOne({
_id: recipientId
}, {
fields: {
_id: true
@ -56,28 +45,19 @@ module.exports = (params, user) =>
if (recipient === null) {
return rej('user not found');
}
} else {
return rej('user_id is required');
}
// Get 'text' parameter
let text = params.text;
if (text !== undefined && text !== null) {
text = text.trim();
if (text.length === 0) {
text = null;
} else if (text.length > maxTextLength) {
return rej('too long text');
}
} else {
text = null;
}
const [text, textErr] = it(params.text).expect.string().validate(isValidText).qed();
if (textErr) return rej('invalid text');
// Get 'file_id' parameter
let file = params.file_id;
if (file !== undefined && file !== null) {
const [fileId, fileIdErr] = it(params.file_id).expect.id().qed();
if (fileIdErr) return rej('invalid file_id param');
let file = null;
if (fileId !== null) {
file = await DriveFile.findOne({
_id: new mongo.ObjectID(file),
_id: fileId,
user_id: user._id
}, {
data: false
@ -86,8 +66,6 @@ module.exports = (params, user) =>
if (file === null) {
return rej('file not found');
}
} else {
file = null;
}
// テキストが無いかつ添付ファイルも無かったらエラー

View file

@ -3,7 +3,7 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import it from '../../it';
import App from '../../models/app';
import serialize from '../../serializers/app';
@ -18,25 +18,12 @@ module.exports = (params, user) =>
new Promise(async (res, rej) =>
{
// Get 'limit' parameter
let limit = params.limit;
if (limit !== undefined && limit !== null) {
limit = parseInt(limit, 10);
// From 1 to 100
if (!(1 <= limit && limit <= 100)) {
return rej('invalid limit range');
}
} else {
limit = 10;
}
const [limit, limitErr] = it(params.limit).expect.number().range(1, 100).default(10).qed();
if (limitErr) return rej('invalid limit param');
// Get 'offset' parameter
let offset = params.offset;
if (offset !== undefined && offset !== null) {
offset = parseInt(offset, 10);
} else {
offset = 0;
}
const [offset, offsetErr] = it(params.offset).expect.number().min(0).default(0).qed();
if (offsetErr) return rej('invalid offset param');
const query = {
user_id: user._id

View file

@ -3,10 +3,10 @@
/**
* Module dependencies
*/
import * as mongo from 'mongodb';
import Notification from '../../../models/notification';
import serialize from '../../../serializers/notification';
import event from '../../../event';
import it from '../../it';
import Notification from '../../models/notification';
import serialize from '../../serializers/notification';
import event from '../../event';
/**
* Mark as read a notification
@ -17,16 +17,13 @@ import event from '../../../event';
*/
module.exports = (params, user) =>
new Promise(async (res, rej) => {
const notificationId = params.notification;
if (notificationId === undefined || notificationId === null) {
return rej('notification is required');
}
const [notificationId, notificationIdErr] = it(params.notification_id).expect.id().required().qed();
if (notificationIdErr) return rej('invalid notification_id param');
// Get notification
const notification = await Notification
.findOne({
_id: new mongo.ObjectID(notificationId),
_id: notificationId,
i: user._id
});

View file

@ -424,7 +424,7 @@ class IdQuery extends QueryCore {
/**
*
*/
qed(): [any[], Error] {
qed(): [mongo.ObjectID, Error] {
return super.qed();
}
@ -433,7 +433,7 @@ class IdQuery extends QueryCore {
* false
* @param validator
*/
validate(validator: Validator<any[]>) {
validate(validator: Validator<mongo.ObjectID>) {
return super.validate(validator);
}
}

View file

@ -1,3 +1,8 @@
import db from '../../db/mongodb';
export default db.get('messaging_messages') as any; // fuck type definition
export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != '';
}

View file

@ -19,7 +19,7 @@ import deepcopy = require('deepcopy');
*/
export default (
message: any,
me: any,
me?: any,
options?: {
populateRecipient: boolean
}