diff options
Diffstat (limited to 'src/server/api')
| -rw-r--r-- | src/server/api/common/read-messaging-message.ts | 8 | ||||
| -rw-r--r-- | src/server/api/common/read-notification.ts | 8 | ||||
| -rw-r--r-- | src/server/api/endpoints.ts | 17 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages.ts | 7 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/messages/create.ts | 7 | ||||
| -rw-r--r-- | src/server/api/endpoints/messaging/unread.ts | 29 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes.ts | 4 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/delete.ts | 26 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/global-timeline.ts | 28 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/local-timeline.ts | 32 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/replies.ts | 26 | ||||
| -rw-r--r-- | src/server/api/endpoints/notifications/get_unread_count.ts | 28 | ||||
| -rw-r--r-- | src/server/api/endpoints/notifications/mark_as_read_all.ts | 11 | ||||
| -rw-r--r-- | src/server/api/service/github.ts | 2 |
14 files changed, 105 insertions, 128 deletions
diff --git a/src/server/api/common/read-messaging-message.ts b/src/server/api/common/read-messaging-message.ts index 28854e186e..fd5e9f242c 100644 --- a/src/server/api/common/read-messaging-message.ts +++ b/src/server/api/common/read-messaging-message.ts @@ -4,6 +4,7 @@ import { IMessagingMessage as IMessage } from '../../../models/messaging-message import publishUserStream from '../../../publishers/stream'; import { publishMessagingStream } from '../../../publishers/stream'; import { publishMessagingIndexStream } from '../../../publishers/stream'; +import User from '../../../models/user'; /** * Mark as read message(s) @@ -62,6 +63,13 @@ export default ( }); if (count == 0) { + // Update flag + User.update({ _id: userId }, { + $set: { + hasUnreadMessagingMessage: false + } + }); + // 全ての(いままで未読だった)自分宛てのメッセージを(これで)読みましたよというイベントを発行 publishUserStream(userId, 'read_all_messaging_messages'); } diff --git a/src/server/api/common/read-notification.ts b/src/server/api/common/read-notification.ts index cdb87a4114..6505c58c39 100644 --- a/src/server/api/common/read-notification.ts +++ b/src/server/api/common/read-notification.ts @@ -2,6 +2,7 @@ import * as mongo from 'mongodb'; import { default as Notification, INotification } from '../../../models/notification'; import publishUserStream from '../../../publishers/stream'; import Mute from '../../../models/mute'; +import User from '../../../models/user'; /** * Mark as read notification(s) @@ -57,6 +58,13 @@ export default ( }); if (count == 0) { + // Update flag + User.update({ _id: userId }, { + $set: { + hasUnreadNotification: false + } + }); + // 全ての(いままで未読だった)通知を(これで)読みましたよというイベントを発行 publishUserStream(userId, 'read_all_notifications'); } diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts index 892da3540f..b4ab65eb16 100644 --- a/src/server/api/endpoints.ts +++ b/src/server/api/endpoints.ts @@ -280,11 +280,6 @@ const endpoints: Endpoint[] = [ }, { - name: 'notifications/get_unread_count', - withCredential: true, - kind: 'notification-read' - }, - { name: 'notifications/delete', withCredential: true, kind: 'notification-write' @@ -495,6 +490,11 @@ const endpoints: Endpoint[] = [ kind: 'note-write' }, { + name: 'notes/delete', + withCredential: true, + kind: 'note-write' + }, + { name: 'notes/renotes' }, { @@ -510,7 +510,6 @@ const endpoints: Endpoint[] = [ }, { name: 'notes/local-timeline', - withCredential: true, limit: { duration: ms('10minutes'), max: 100 @@ -518,7 +517,6 @@ const endpoints: Endpoint[] = [ }, { name: 'notes/global-timeline', - withCredential: true, limit: { duration: ms('10minutes'), max: 100 @@ -608,11 +606,6 @@ const endpoints: Endpoint[] = [ kind: 'messaging-read' }, { - name: 'messaging/unread', - withCredential: true, - kind: 'messaging-read' - }, - { name: 'messaging/messages', withCredential: true, kind: 'messaging-read' diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts index 0338aba68a..9c3a48334b 100644 --- a/src/server/api/endpoints/messaging/messages.ts +++ b/src/server/api/endpoints/messaging/messages.ts @@ -1,6 +1,3 @@ -/** - * Module dependencies - */ import $ from 'cafy'; import ID from '../../../../cafy-id'; import Message from '../../../../models/messaging-message'; import User from '../../../../models/user'; @@ -9,10 +6,6 @@ import read from '../../common/read-messaging-message'; /** * Get messages - * - * @param {any} params - * @param {any} user - * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { // Get 'userId' parameter diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts index db471839e7..41238de1e1 100644 --- a/src/server/api/endpoints/messaging/messages/create.ts +++ b/src/server/api/endpoints/messaging/messages/create.ts @@ -91,6 +91,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { publishMessagingIndexStream(message.recipientId, 'message', messageObj); publishUserStream(message.recipientId, 'messaging_message', messageObj); + // Update flag + User.update({ _id: recipient._id }, { + $set: { + hasUnreadMessagingMessage: true + } + }); + // 3秒経っても(今回作成した)メッセージが既読にならなかったら「未読のメッセージがありますよ」イベントを発行する setTimeout(async () => { const freshMessage = await Message.findOne({ _id: message._id }, { isRead: true }); diff --git a/src/server/api/endpoints/messaging/unread.ts b/src/server/api/endpoints/messaging/unread.ts deleted file mode 100644 index 1d83af501d..0000000000 --- a/src/server/api/endpoints/messaging/unread.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Module dependencies - */ -import Message from '../../../../models/messaging-message'; -import Mute from '../../../../models/mute'; - -/** - * Get count of unread messages - */ -module.exports = (params, user) => new Promise(async (res, rej) => { - const mute = await Mute.find({ - muterId: user._id, - deletedAt: { $exists: false } - }); - const mutedUserIds = mute.map(m => m.muteeId); - - const count = await Message - .count({ - userId: { - $nin: mutedUserIds - }, - recipientId: user._id, - isRead: false - }); - - res({ - count: count - }); -}); diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts index 21946d1bd3..e6fe80ac8a 100644 --- a/src/server/api/endpoints/notes.ts +++ b/src/server/api/endpoints/notes.ts @@ -53,7 +53,9 @@ module.exports = (params) => new Promise(async (res, rej) => { const sort = { _id: -1 }; - const query = {} as any; + const query = { + visibility: 'public' + } as any; if (sinceId) { sort._id = 1; query._id = { diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts new file mode 100644 index 0000000000..9bbb1541d6 --- /dev/null +++ b/src/server/api/endpoints/notes/delete.ts @@ -0,0 +1,26 @@ +import $ from 'cafy'; import ID from '../../../../cafy-id'; +import Note from '../../../../models/note'; +import deleteNote from '../../../../services/note/delete'; + +/** + * Delete a note + */ +module.exports = (params, user) => new Promise(async (res, rej) => { + // Get 'noteId' parameter + const [noteId, noteIdErr] = $.type(ID).get(params.noteId); + if (noteIdErr) return rej('invalid noteId param'); + + // Fetch note + const note = await Note.findOne({ + _id: noteId, + userId: user._id + }); + + if (note === null) { + return rej('note not found'); + } + + await deleteNote(user, note); + + res(); +}); diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts index d22a1763de..7cf06c3af1 100644 --- a/src/server/api/endpoints/notes/global-timeline.ts +++ b/src/server/api/endpoints/notes/global-timeline.ts @@ -9,7 +9,7 @@ import { pack } from '../../../../models/note'; /** * Get timeline of global */ -module.exports = async (params, user, app) => { +module.exports = async (params, user) => { // Get 'limit' parameter const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit); if (limitErr) throw 'invalid limit param'; @@ -36,9 +36,9 @@ module.exports = async (params, user, app) => { } // ミュートしているユーザーを取得 - const mutedUserIds = (await Mute.find({ + const mutedUserIds = user ? (await Mute.find({ muterId: user._id - })).map(m => m.muteeId); + })).map(m => m.muteeId) : null; //#region Construct query const sort = { @@ -46,17 +46,23 @@ module.exports = async (params, user, app) => { }; const query = { - // mute - userId: { + // public only + visibility: 'public' + } as any; + + if (mutedUserIds && mutedUserIds.length > 0) { + query.userId = { $nin: mutedUserIds - }, - '_reply.userId': { + }; + + query['_reply.userId'] = { $nin: mutedUserIds - }, - '_renote.userId': { + }; + + query['_renote.userId'] = { $nin: mutedUserIds - } - } as any; + }; + } if (sinceId) { sort._id = 1; diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts index e7ebe5d960..7d01de3d43 100644 --- a/src/server/api/endpoints/notes/local-timeline.ts +++ b/src/server/api/endpoints/notes/local-timeline.ts @@ -9,7 +9,7 @@ import { pack } from '../../../../models/note'; /** * Get timeline of local */ -module.exports = async (params, user, app) => { +module.exports = async (params, user) => { // Get 'limit' parameter const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit); if (limitErr) throw 'invalid limit param'; @@ -36,9 +36,9 @@ module.exports = async (params, user, app) => { } // ミュートしているユーザーを取得 - const mutedUserIds = (await Mute.find({ + const mutedUserIds = user ? (await Mute.find({ muterId: user._id - })).map(m => m.muteeId); + })).map(m => m.muteeId) : null; //#region Construct query const sort = { @@ -46,21 +46,27 @@ module.exports = async (params, user, app) => { }; const query = { - // mute - userId: { - $nin: mutedUserIds - }, - '_reply.userId': { - $nin: mutedUserIds - }, - '_renote.userId': { - $nin: mutedUserIds - }, + // public only + visibility: 'public', // local '_user.host': null } as any; + if (mutedUserIds && mutedUserIds.length > 0) { + query.userId = { + $nin: mutedUserIds + }; + + query['_reply.userId'] = { + $nin: mutedUserIds + }; + + query['_renote.userId'] = { + $nin: mutedUserIds + }; + } + if (sinceId) { sort._id = 1; query._id = { diff --git a/src/server/api/endpoints/notes/replies.ts b/src/server/api/endpoints/notes/replies.ts index 11d221d8f7..608027f6b1 100644 --- a/src/server/api/endpoints/notes/replies.ts +++ b/src/server/api/endpoints/notes/replies.ts @@ -1,15 +1,8 @@ -/** - * Module dependencies - */ import $ from 'cafy'; import ID from '../../../../cafy-id'; import Note, { pack } from '../../../../models/note'; /** - * Show a replies of a note - * - * @param {any} params - * @param {any} user - * @return {Promise<any>} + * Get replies of a note */ module.exports = (params, user) => new Promise(async (res, rej) => { // Get 'noteId' parameter @@ -24,10 +17,6 @@ module.exports = (params, user) => new Promise(async (res, rej) => { const [offset = 0, offsetErr] = $.num.optional().min(0).get(params.offset); if (offsetErr) return rej('invalid offset param'); - // Get 'sort' parameter - const [sort = 'desc', sortError] = $.str.optional().or('desc asc').get(params.sort); - if (sortError) return rej('invalid sort param'); - // Lookup note const note = await Note.findOne({ _id: noteId @@ -37,17 +26,8 @@ module.exports = (params, user) => new Promise(async (res, rej) => { return rej('note not found'); } - // Issue query - const replies = await Note - .find({ replyId: note._id }, { - limit: limit, - skip: offset, - sort: { - _id: sort == 'asc' ? 1 : -1 - } - }); + const ids = (note._replyIds || []).slice(offset, offset + limit); // Serialize - res(await Promise.all(replies.map(async note => - await pack(note, user)))); + res(await Promise.all(ids.map(id => pack(id, user)))); }); diff --git a/src/server/api/endpoints/notifications/get_unread_count.ts b/src/server/api/endpoints/notifications/get_unread_count.ts deleted file mode 100644 index 9766366ff1..0000000000 --- a/src/server/api/endpoints/notifications/get_unread_count.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Module dependencies - */ -import Notification from '../../../../models/notification'; -import Mute from '../../../../models/mute'; - -/** - * Get count of unread notifications - */ -module.exports = (params, user) => new Promise(async (res, rej) => { - const mute = await Mute.find({ - muterId: user._id - }); - const mutedUserIds = mute.map(m => m.muteeId); - - const count = await Notification - .count({ - notifieeId: user._id, - notifierId: { - $nin: mutedUserIds - }, - isRead: false - }); - - res({ - count: count - }); -}); diff --git a/src/server/api/endpoints/notifications/mark_as_read_all.ts b/src/server/api/endpoints/notifications/mark_as_read_all.ts index dce3cb4663..7a48ca3e62 100644 --- a/src/server/api/endpoints/notifications/mark_as_read_all.ts +++ b/src/server/api/endpoints/notifications/mark_as_read_all.ts @@ -1,8 +1,6 @@ -/** - * Module dependencies - */ import Notification from '../../../../models/notification'; import event from '../../../../publishers/stream'; +import User from '../../../../models/user'; /** * Mark as read all notifications @@ -23,6 +21,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { // Response res(); + // Update flag + User.update({ _id: user._id }, { + $set: { + hasUnreadNotification: false + } + }); + // 全ての通知を読みましたよというイベントを発行 event(user._id, 'read_all_notifications'); }); diff --git a/src/server/api/service/github.ts b/src/server/api/service/github.ts index cd9760a36d..da33648a16 100644 --- a/src/server/api/service/github.ts +++ b/src/server/api/service/github.ts @@ -25,7 +25,7 @@ const post = async text => { } } - createNote(bot, { text }); + createNote(bot, { text, visibility: 'home' }); }; // Init router |