diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-04-08 02:30:37 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-04-08 02:30:37 +0900 |
| commit | a1b490afa756a71b9cef4afa424575bc223bc612 (patch) | |
| tree | 06de4d839e17b1e08e0891542af7360c701a154a /src/server/api/endpoints/notes | |
| parent | Merge pull request #1392 from syuilo/greenkeeper/element-ui-2.3.3 (diff) | |
| download | misskey-a1b490afa756a71b9cef4afa424575bc223bc612.tar.gz misskey-a1b490afa756a71b9cef4afa424575bc223bc612.tar.bz2 misskey-a1b490afa756a71b9cef4afa424575bc223bc612.zip | |
Post --> Note
Closes #1411
Diffstat (limited to '')
| -rw-r--r-- | src/server/api/endpoints/notes/context.ts (renamed from src/server/api/endpoints/posts/context.ts) | 30 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/create.ts | 251 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/favorites/create.ts (renamed from src/server/api/endpoints/posts/favorites/create.ts) | 22 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/favorites/delete.ts (renamed from src/server/api/endpoints/posts/favorites/delete.ts) | 20 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/mentions.ts (renamed from src/server/api/endpoints/posts/mentions.ts) | 6 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/polls/recommendation.ts (renamed from src/server/api/endpoints/posts/polls/recommendation.ts) | 12 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/polls/vote.ts (renamed from src/server/api/endpoints/posts/polls/vote.ts) | 48 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/reactions.ts (renamed from src/server/api/endpoints/posts/reactions.ts) | 24 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/reactions/create.ts (renamed from src/server/api/endpoints/posts/reactions/create.ts) | 24 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/reactions/delete.ts (renamed from src/server/api/endpoints/posts/reactions/delete.ts) | 24 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/replies.ts (renamed from src/server/api/endpoints/posts/replies.ts) | 28 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/reposts.ts (renamed from src/server/api/endpoints/posts/reposts.ts) | 28 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/search.ts (renamed from src/server/api/endpoints/posts/search.ts) | 42 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/show.ts | 32 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/timeline.ts (renamed from src/server/api/endpoints/posts/timeline.ts) | 10 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/trend.ts (renamed from src/server/api/endpoints/posts/trend.ts) | 24 |
16 files changed, 454 insertions, 171 deletions
diff --git a/src/server/api/endpoints/posts/context.ts b/src/server/api/endpoints/notes/context.ts index 7abb045a49..2caf742d26 100644 --- a/src/server/api/endpoints/posts/context.ts +++ b/src/server/api/endpoints/notes/context.ts @@ -2,19 +2,19 @@ * Module dependencies */ import $ from 'cafy'; -import Post, { pack } from '../../../../models/post'; +import Note, { pack } from '../../../../models/note'; /** - * Show a context of a post + * Show a context of a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get 'limit' parameter const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$; @@ -24,13 +24,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { const [offset = 0, offsetErr] = $(params.offset).optional.number().min(0).$; if (offsetErr) return rej('invalid offset param'); - // Lookup post - const post = await Post.findOne({ - _id: postId + // Lookup note + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } const context = []; @@ -38,7 +38,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { async function get(id) { i++; - const p = await Post.findOne({ _id: id }); + const p = await Note.findOne({ _id: id }); if (i > offset) { context.push(p); @@ -53,11 +53,11 @@ module.exports = (params, user) => new Promise(async (res, rej) => { } } - if (post.replyId) { - await get(post.replyId); + if (note.replyId) { + await get(note.replyId); } // Serialize - res(await Promise.all(context.map(async post => - await pack(post, user)))); + res(await Promise.all(context.map(async note => + await pack(note, user)))); }); diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts new file mode 100644 index 0000000000..7e79912b1b --- /dev/null +++ b/src/server/api/endpoints/notes/create.ts @@ -0,0 +1,251 @@ +/** + * Module dependencies + */ +import $ from 'cafy'; +import deepEqual = require('deep-equal'); +import Note, { INote, isValidText, isValidCw, pack } from '../../../../models/note'; +import { ILocalUser } from '../../../../models/user'; +import Channel, { IChannel } from '../../../../models/channel'; +import DriveFile from '../../../../models/drive-file'; +import create from '../../../../services/note/create'; +import { IApp } from '../../../../models/app'; + +/** + * Create a note + * + * @param {any} params + * @param {any} user + * @param {any} app + * @return {Promise<any>} + */ +module.exports = (params, user: ILocalUser, app: IApp) => new Promise(async (res, rej) => { + // Get 'visibility' parameter + const [visibility = 'public', visibilityErr] = $(params.visibility).optional.string().or(['public', 'unlisted', 'private', 'direct']).$; + if (visibilityErr) return rej('invalid visibility'); + + // Get 'text' parameter + const [text, textErr] = $(params.text).optional.string().pipe(isValidText).$; + if (textErr) return rej('invalid text'); + + // Get 'cw' parameter + const [cw, cwErr] = $(params.cw).optional.string().pipe(isValidCw).$; + if (cwErr) return rej('invalid cw'); + + // Get 'viaMobile' parameter + const [viaMobile = false, viaMobileErr] = $(params.viaMobile).optional.boolean().$; + if (viaMobileErr) return rej('invalid viaMobile'); + + // Get 'tags' parameter + const [tags = [], tagsErr] = $(params.tags).optional.array('string').unique().eachQ(t => t.range(1, 32)).$; + if (tagsErr) return rej('invalid tags'); + + // Get 'geo' parameter + const [geo, geoErr] = $(params.geo).optional.nullable.strict.object() + .have('coordinates', $().array().length(2) + .item(0, $().number().range(-180, 180)) + .item(1, $().number().range(-90, 90))) + .have('altitude', $().nullable.number()) + .have('accuracy', $().nullable.number()) + .have('altitudeAccuracy', $().nullable.number()) + .have('heading', $().nullable.number().range(0, 360)) + .have('speed', $().nullable.number()) + .$; + if (geoErr) return rej('invalid geo'); + + // Get 'mediaIds' parameter + const [mediaIds, mediaIdsErr] = $(params.mediaIds).optional.array('id').unique().range(1, 4).$; + if (mediaIdsErr) return rej('invalid mediaIds'); + + let files = []; + if (mediaIds !== undefined) { + // Fetch files + // forEach だと途中でエラーなどがあっても return できないので + // 敢えて for を使っています。 + for (const mediaId of mediaIds) { + // Fetch file + // SELECT _id + const entity = await DriveFile.findOne({ + _id: mediaId, + 'metadata.userId': user._id + }); + + if (entity === null) { + return rej('file not found'); + } else { + files.push(entity); + } + } + } else { + files = null; + } + + // Get 'renoteId' parameter + const [renoteId, renoteIdErr] = $(params.renoteId).optional.id().$; + if (renoteIdErr) return rej('invalid renoteId'); + + let renote: INote = null; + let isQuote = false; + if (renoteId !== undefined) { + // Fetch renote to note + renote = await Note.findOne({ + _id: renoteId + }); + + if (renote == null) { + return rej('renoteee is not found'); + } else if (renote.renoteId && !renote.text && !renote.mediaIds) { + return rej('cannot renote to renote'); + } + + // Fetch recently note + const latestNote = await Note.findOne({ + userId: user._id + }, { + sort: { + _id: -1 + } + }); + + isQuote = text != null || files != null; + + // 直近と同じRenote対象かつ引用じゃなかったらエラー + if (latestNote && + latestNote.renoteId && + latestNote.renoteId.equals(renote._id) && + !isQuote) { + return rej('cannot renote same note that already reposted in your latest note'); + } + + // 直近がRenote対象かつ引用じゃなかったらエラー + if (latestNote && + latestNote._id.equals(renote._id) && + !isQuote) { + return rej('cannot renote your latest note'); + } + } + + // Get 'replyId' parameter + const [replyId, replyIdErr] = $(params.replyId).optional.id().$; + if (replyIdErr) return rej('invalid replyId'); + + let reply: INote = null; + if (replyId !== undefined) { + // Fetch reply + reply = await Note.findOne({ + _id: replyId + }); + + if (reply === null) { + return rej('in reply to note is not found'); + } + + // 返信対象が引用でないRenoteだったらエラー + if (reply.renoteId && !reply.text && !reply.mediaIds) { + return rej('cannot reply to renote'); + } + } + + // Get 'channelId' parameter + const [channelId, channelIdErr] = $(params.channelId).optional.id().$; + if (channelIdErr) return rej('invalid channelId'); + + let channel: IChannel = null; + if (channelId !== undefined) { + // Fetch channel + channel = await Channel.findOne({ + _id: channelId + }); + + if (channel === null) { + return rej('channel not found'); + } + + // 返信対象の投稿がこのチャンネルじゃなかったらダメ + if (reply && !channelId.equals(reply.channelId)) { + return rej('チャンネル内部からチャンネル外部の投稿に返信することはできません'); + } + + // Renote対象の投稿がこのチャンネルじゃなかったらダメ + if (renote && !channelId.equals(renote.channelId)) { + return rej('チャンネル内部からチャンネル外部の投稿をRenoteすることはできません'); + } + + // 引用ではないRenoteはダメ + if (renote && !isQuote) { + return rej('チャンネル内部では引用ではないRenoteをすることはできません'); + } + } else { + // 返信対象の投稿がチャンネルへの投稿だったらダメ + if (reply && reply.channelId != null) { + return rej('チャンネル外部からチャンネル内部の投稿に返信することはできません'); + } + + // Renote対象の投稿がチャンネルへの投稿だったらダメ + if (renote && renote.channelId != null) { + return rej('チャンネル外部からチャンネル内部の投稿をRenoteすることはできません'); + } + } + + // Get 'poll' parameter + const [poll, pollErr] = $(params.poll).optional.strict.object() + .have('choices', $().array('string') + .unique() + .range(2, 10) + .each(c => c.length > 0 && c.length < 50)) + .$; + if (pollErr) return rej('invalid poll'); + + if (poll) { + (poll as any).choices = (poll as any).choices.map((choice, i) => ({ + id: i, // IDを付与 + text: choice.trim(), + votes: 0 + })); + } + + // テキストが無いかつ添付ファイルが無いかつRenoteも無いかつ投票も無かったらエラー + if (text === undefined && files === null && renote === null && poll === undefined) { + return rej('text, mediaIds, renoteId or poll is required'); + } + + // 直近の投稿と重複してたらエラー + // TODO: 直近の投稿が一日前くらいなら重複とは見なさない + if (user.latestNote) { + if (deepEqual({ + text: user.latestNote.text, + reply: user.latestNote.replyId ? user.latestNote.replyId.toString() : null, + renote: user.latestNote.renoteId ? user.latestNote.renoteId.toString() : null, + mediaIds: (user.latestNote.mediaIds || []).map(id => id.toString()) + }, { + text: text, + reply: reply ? reply._id.toString() : null, + renote: renote ? renote._id.toString() : null, + mediaIds: (files || []).map(file => file._id.toString()) + })) { + return rej('duplicate'); + } + } + + // 投稿を作成 + const note = await create(user, { + createdAt: new Date(), + media: files, + poll: poll, + text: text, + reply, + renote, + cw: cw, + tags: tags, + app: app, + viaMobile: viaMobile, + visibility, + geo + }); + + const noteObj = await pack(note, user); + + // Reponse + res({ + createdNote: noteObj + }); +}); diff --git a/src/server/api/endpoints/posts/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts index f537fb7ddf..c8e7f52426 100644 --- a/src/server/api/endpoints/posts/favorites/create.ts +++ b/src/server/api/endpoints/notes/favorites/create.ts @@ -3,32 +3,32 @@ */ import $ from 'cafy'; import Favorite from '../../../../../models/favorite'; -import Post from '../../../../../models/post'; +import Note from '../../../../../models/note'; /** - * Favorite a post + * Favorite a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get favoritee - const post = await Post.findOne({ - _id: postId + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // if already favorited const exist = await Favorite.findOne({ - postId: post._id, + noteId: note._id, userId: user._id }); @@ -39,7 +39,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { // Create favorite await Favorite.insert({ createdAt: new Date(), - postId: post._id, + noteId: note._id, userId: user._id }); diff --git a/src/server/api/endpoints/posts/favorites/delete.ts b/src/server/api/endpoints/notes/favorites/delete.ts index 28930337a3..92aceb343b 100644 --- a/src/server/api/endpoints/posts/favorites/delete.ts +++ b/src/server/api/endpoints/notes/favorites/delete.ts @@ -3,32 +3,32 @@ */ import $ from 'cafy'; import Favorite from '../../../../../models/favorite'; -import Post from '../../../../../models/post'; +import Note from '../../../../../models/note'; /** - * Unfavorite a post + * Unfavorite a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get favoritee - const post = await Post.findOne({ - _id: postId + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // if already favorited const exist = await Favorite.findOne({ - postId: post._id, + noteId: note._id, userId: user._id }); diff --git a/src/server/api/endpoints/posts/mentions.ts b/src/server/api/endpoints/notes/mentions.ts index d7302c0620..c507acbaec 100644 --- a/src/server/api/endpoints/posts/mentions.ts +++ b/src/server/api/endpoints/notes/mentions.ts @@ -2,9 +2,9 @@ * Module dependencies */ import $ from 'cafy'; -import Post from '../../../../models/post'; +import Note from '../../../../models/note'; import getFriends from '../../common/get-friends'; -import { pack } from '../../../../models/post'; +import { pack } from '../../../../models/note'; /** * Get mentions of myself @@ -65,7 +65,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { } // Issue query - const mentions = await Post + const mentions = await Note .find(query, { limit: limit, sort: sort diff --git a/src/server/api/endpoints/posts/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts index d706742618..cb530ea2cf 100644 --- a/src/server/api/endpoints/posts/polls/recommendation.ts +++ b/src/server/api/endpoints/notes/polls/recommendation.ts @@ -3,7 +3,7 @@ */ import $ from 'cafy'; import Vote from '../../../../../models/poll-vote'; -import Post, { pack } from '../../../../../models/post'; +import Note, { pack } from '../../../../../models/note'; /** * Get recommended polls @@ -27,13 +27,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { }, { fields: { _id: false, - postId: true + noteId: true } }); - const nin = votes && votes.length != 0 ? votes.map(v => v.postId) : []; + const nin = votes && votes.length != 0 ? votes.map(v => v.noteId) : []; - const posts = await Post + const notes = await Note .find({ _id: { $nin: nin @@ -54,6 +54,6 @@ module.exports = (params, user) => new Promise(async (res, rej) => { }); // Serialize - res(await Promise.all(posts.map(async post => - await pack(post, user, { detail: true })))); + res(await Promise.all(notes.map(async note => + await pack(note, user, { detail: true })))); }); diff --git a/src/server/api/endpoints/posts/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts index c270cd09ab..0e27f87ee2 100644 --- a/src/server/api/endpoints/posts/polls/vote.ts +++ b/src/server/api/endpoints/notes/polls/vote.ts @@ -3,47 +3,47 @@ */ import $ from 'cafy'; import Vote from '../../../../../models/poll-vote'; -import Post from '../../../../../models/post'; -import Watching from '../../../../../models/post-watching'; -import watch from '../../../../../post/watch'; -import { publishPostStream } from '../../../../../publishers/stream'; +import Note from '../../../../../models/note'; +import Watching from '../../../../../models/note-watching'; +import watch from '../../../../../note/watch'; +import { publishNoteStream } from '../../../../../publishers/stream'; import notify from '../../../../../publishers/notify'; /** - * Vote poll of a post + * Vote poll of a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get votee - const post = await Post.findOne({ - _id: postId + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } - if (post.poll == null) { + if (note.poll == null) { return rej('poll not found'); } // Get 'choice' parameter const [choice, choiceError] = $(params.choice).number() - .pipe(c => post.poll.choices.some(x => x.id == c)) + .pipe(c => note.poll.choices.some(x => x.id == c)) .$; if (choiceError) return rej('invalid choice param'); // if already voted const exist = await Vote.findOne({ - postId: post._id, + noteId: note._id, userId: user._id }); @@ -54,7 +54,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { // Create vote await Vote.insert({ createdAt: new Date(), - postId: post._id, + noteId: note._id, userId: user._id, choice: choice }); @@ -63,25 +63,25 @@ module.exports = (params, user) => new Promise(async (res, rej) => { res(); const inc = {}; - inc[`poll.choices.${findWithAttr(post.poll.choices, 'id', choice)}.votes`] = 1; + inc[`poll.choices.${findWithAttr(note.poll.choices, 'id', choice)}.votes`] = 1; // Increment votes count - await Post.update({ _id: post._id }, { + await Note.update({ _id: note._id }, { $inc: inc }); - publishPostStream(post._id, 'poll_voted'); + publishNoteStream(note._id, 'poll_voted'); // Notify - notify(post.userId, user._id, 'poll_vote', { - postId: post._id, + notify(note.userId, user._id, 'poll_vote', { + noteId: note._id, choice: choice }); // Fetch watchers Watching .find({ - postId: post._id, + noteId: note._id, userId: { $ne: user._id }, // 削除されたドキュメントは除く deletedAt: { $exists: false } @@ -93,7 +93,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { .then(watchers => { watchers.forEach(watcher => { notify(watcher.userId, user._id, 'poll_vote', { - postId: post._id, + noteId: note._id, choice: choice }); }); @@ -101,7 +101,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { // この投稿をWatchする if (user.account.settings.autoWatch !== false) { - watch(user._id, post); + watch(user._id, note); } }); diff --git a/src/server/api/endpoints/posts/reactions.ts b/src/server/api/endpoints/notes/reactions.ts index da733f5337..bbff97bb0a 100644 --- a/src/server/api/endpoints/posts/reactions.ts +++ b/src/server/api/endpoints/notes/reactions.ts @@ -2,20 +2,20 @@ * Module dependencies */ import $ from 'cafy'; -import Post from '../../../../models/post'; -import Reaction, { pack } from '../../../../models/post-reaction'; +import Note from '../../../../models/note'; +import Reaction, { pack } from '../../../../models/note-reaction'; /** - * Show reactions of a post + * Show reactions of a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get 'limit' parameter const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$; @@ -29,19 +29,19 @@ module.exports = (params, user) => new Promise(async (res, rej) => { const [sort = 'desc', sortError] = $(params.sort).optional.string().or('desc asc').$; if (sortError) return rej('invalid sort param'); - // Lookup post - const post = await Post.findOne({ - _id: postId + // Lookup note + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // Issue query const reactions = await Reaction .find({ - postId: post._id, + noteId: note._id, deletedAt: { $exists: false } }, { limit: limit, diff --git a/src/server/api/endpoints/posts/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts index 71fa6a2955..ffb7bcc35b 100644 --- a/src/server/api/endpoints/posts/reactions/create.ts +++ b/src/server/api/endpoints/notes/reactions/create.ts @@ -2,17 +2,17 @@ * Module dependencies */ import $ from 'cafy'; -import Reaction from '../../../../../models/post-reaction'; -import Post from '../../../../../models/post'; -import create from '../../../../../services/post/reaction/create'; +import Reaction from '../../../../../models/note-reaction'; +import Note from '../../../../../models/note'; +import create from '../../../../../services/note/reaction/create'; /** - * React to a post + * React to a note */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get 'reaction' parameter const [reaction, reactionErr] = $(params.reaction).string().or([ @@ -29,16 +29,16 @@ module.exports = (params, user) => new Promise(async (res, rej) => { if (reactionErr) return rej('invalid reaction param'); // Fetch reactee - const post = await Post.findOne({ - _id: postId + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } try { - await create(user, post, reaction); + await create(user, note, reaction); } catch (e) { rej(e); } diff --git a/src/server/api/endpoints/posts/reactions/delete.ts b/src/server/api/endpoints/notes/reactions/delete.ts index 3a88bbd7ca..b5d738b8ff 100644 --- a/src/server/api/endpoints/posts/reactions/delete.ts +++ b/src/server/api/endpoints/notes/reactions/delete.ts @@ -2,34 +2,34 @@ * Module dependencies */ import $ from 'cafy'; -import Reaction from '../../../../../models/post-reaction'; -import Post from '../../../../../models/post'; +import Reaction from '../../../../../models/note-reaction'; +import Note from '../../../../../models/note'; // import event from '../../../publishers/stream'; /** - * Unreact to a post + * Unreact to a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Fetch unreactee - const post = await Post.findOne({ - _id: postId + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // if already unreacted const exist = await Reaction.findOne({ - postId: post._id, + noteId: note._id, userId: user._id, deletedAt: { $exists: false } }); @@ -54,7 +54,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { dec[`reactionCounts.${exist.reaction}`] = -1; // Decrement reactions count - Post.update({ _id: post._id }, { + Note.update({ _id: note._id }, { $inc: dec }); }); diff --git a/src/server/api/endpoints/posts/replies.ts b/src/server/api/endpoints/notes/replies.ts index dd5a95c173..88d9ff329a 100644 --- a/src/server/api/endpoints/posts/replies.ts +++ b/src/server/api/endpoints/notes/replies.ts @@ -2,19 +2,19 @@ * Module dependencies */ import $ from 'cafy'; -import Post, { pack } from '../../../../models/post'; +import Note, { pack } from '../../../../models/note'; /** - * Show a replies of a post + * Show a replies of a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get 'limit' parameter const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$; @@ -28,18 +28,18 @@ module.exports = (params, user) => new Promise(async (res, rej) => { const [sort = 'desc', sortError] = $(params.sort).optional.string().or('desc asc').$; if (sortError) return rej('invalid sort param'); - // Lookup post - const post = await Post.findOne({ - _id: postId + // Lookup note + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // Issue query - const replies = await Post - .find({ replyId: post._id }, { + const replies = await Note + .find({ replyId: note._id }, { limit: limit, skip: offset, sort: { @@ -48,6 +48,6 @@ module.exports = (params, user) => new Promise(async (res, rej) => { }); // Serialize - res(await Promise.all(replies.map(async post => - await pack(post, user)))); + res(await Promise.all(replies.map(async note => + await pack(note, user)))); }); diff --git a/src/server/api/endpoints/posts/reposts.ts b/src/server/api/endpoints/notes/reposts.ts index ec6218ca38..9dfc2c3cb5 100644 --- a/src/server/api/endpoints/posts/reposts.ts +++ b/src/server/api/endpoints/notes/reposts.ts @@ -2,19 +2,19 @@ * Module dependencies */ import $ from 'cafy'; -import Post, { pack } from '../../../../models/post'; +import Note, { pack } from '../../../../models/note'; /** - * Show a reposts of a post + * Show a renotes of a note * * @param {any} params * @param {any} user * @return {Promise<any>} */ module.exports = (params, user) => new Promise(async (res, rej) => { - // Get 'postId' parameter - const [postId, postIdErr] = $(params.postId).id().$; - if (postIdErr) return rej('invalid postId param'); + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); // Get 'limit' parameter const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$; @@ -33,13 +33,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { return rej('cannot set sinceId and untilId'); } - // Lookup post - const post = await Post.findOne({ - _id: postId + // Lookup note + const note = await Note.findOne({ + _id: noteId }); - if (post === null) { - return rej('post not found'); + if (note === null) { + return rej('note not found'); } // Construct query @@ -47,7 +47,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { _id: -1 }; const query = { - repostId: post._id + renoteId: note._id } as any; if (sinceId) { sort._id = 1; @@ -61,13 +61,13 @@ module.exports = (params, user) => new Promise(async (res, rej) => { } // Issue query - const reposts = await Post + const renotes = await Note .find(query, { limit: limit, sort: sort }); // Serialize - res(await Promise.all(reposts.map(async post => - await pack(post, user)))); + res(await Promise.all(renotes.map(async note => + await pack(note, user)))); }); diff --git a/src/server/api/endpoints/posts/search.ts b/src/server/api/endpoints/notes/search.ts index 21c4e77fdd..bfa17b000e 100644 --- a/src/server/api/endpoints/posts/search.ts +++ b/src/server/api/endpoints/notes/search.ts @@ -3,14 +3,14 @@ */ import $ from 'cafy'; const escapeRegexp = require('escape-regexp'); -import Post from '../../../../models/post'; +import Note from '../../../../models/note'; import User from '../../../../models/user'; import Mute from '../../../../models/mute'; import getFriends from '../../common/get-friends'; -import { pack } from '../../../../models/post'; +import { pack } from '../../../../models/note'; /** - * Search a post + * Search a note * * @param {any} params * @param {any} me @@ -49,9 +49,9 @@ module.exports = (params, me) => new Promise(async (res, rej) => { const [reply = null, replyErr] = $(params.reply).optional.nullable.boolean().$; if (replyErr) return rej('invalid reply param'); - // Get 'repost' parameter - const [repost = null, repostErr] = $(params.repost).optional.nullable.boolean().$; - if (repostErr) return rej('invalid repost param'); + // Get 'renote' parameter + const [renote = null, renoteErr] = $(params.renote).optional.nullable.boolean().$; + if (renoteErr) return rej('invalid renote param'); // Get 'media' parameter const [media = null, mediaErr] = $(params.media).optional.nullable.boolean().$; @@ -100,12 +100,12 @@ module.exports = (params, me) => new Promise(async (res, rej) => { } search(res, rej, me, text, includeUsers, excludeUsers, following, - mute, reply, repost, media, poll, sinceDate, untilDate, offset, limit); + mute, reply, renote, media, poll, sinceDate, untilDate, offset, limit); }); async function search( res, rej, me, text, includeUserIds, excludeUserIds, following, - mute, reply, repost, media, poll, sinceDate, untilDate, offset, max) { + mute, reply, renote, media, poll, sinceDate, untilDate, offset, max) { let q: any = { $and: [] @@ -182,7 +182,7 @@ async function search( '_reply.userId': { $nin: mutedUserIds }, - '_repost.userId': { + '_renote.userId': { $nin: mutedUserIds } }); @@ -192,7 +192,7 @@ async function search( '_reply.userId': { $nin: mutedUserIds }, - '_repost.userId': { + '_renote.userId': { $nin: mutedUserIds } }); @@ -218,7 +218,7 @@ async function search( $in: mutedUserIds } }, { - '_repost.userId': { + '_renote.userId': { $in: mutedUserIds } }] @@ -235,7 +235,7 @@ async function search( $in: mutedUserIds } }, { - '_repost.userId': { + '_renote.userId': { $in: mutedUserIds } }] @@ -265,10 +265,10 @@ async function search( } } - if (repost != null) { - if (repost) { + if (renote != null) { + if (renote) { push({ - repostId: { + renoteId: { $exists: true, $ne: null } @@ -276,11 +276,11 @@ async function search( } else { push({ $or: [{ - repostId: { + renoteId: { $exists: false } }, { - repostId: null + renoteId: null }] }); } @@ -348,8 +348,8 @@ async function search( q = {}; } - // Search posts - const posts = await Post + // Search notes + const notes = await Note .find(q, { sort: { _id: -1 @@ -359,6 +359,6 @@ async function search( }); // Serialize - res(await Promise.all(posts.map(async post => - await pack(post, me)))); + res(await Promise.all(notes.map(async note => + await pack(note, me)))); } diff --git a/src/server/api/endpoints/notes/show.ts b/src/server/api/endpoints/notes/show.ts new file mode 100644 index 0000000000..67cdc3038b --- /dev/null +++ b/src/server/api/endpoints/notes/show.ts @@ -0,0 +1,32 @@ +/** + * Module dependencies + */ +import $ from 'cafy'; +import Note, { pack } from '../../../../models/note'; + +/** + * Show a note + * + * @param {any} params + * @param {any} user + * @return {Promise<any>} + */ +module.exports = (params, user) => new Promise(async (res, rej) => { + // Get 'noteId' parameter + const [noteId, noteIdErr] = $(params.noteId).id().$; + if (noteIdErr) return rej('invalid noteId param'); + + // Get note + const note = await Note.findOne({ + _id: noteId + }); + + if (note === null) { + return rej('note not found'); + } + + // Serialize + res(await pack(note, user, { + detail: true + })); +}); diff --git a/src/server/api/endpoints/posts/timeline.ts b/src/server/api/endpoints/notes/timeline.ts index b58d25fa80..5263cfb2aa 100644 --- a/src/server/api/endpoints/posts/timeline.ts +++ b/src/server/api/endpoints/notes/timeline.ts @@ -3,11 +3,11 @@ */ import $ from 'cafy'; import rap from '@prezzemolo/rap'; -import Post from '../../../../models/post'; +import Note from '../../../../models/note'; import Mute from '../../../../models/mute'; import ChannelWatching from '../../../../models/channel-watching'; import getFriends from '../../common/get-friends'; -import { pack } from '../../../../models/post'; +import { pack } from '../../../../models/note'; /** * Get timeline of myself @@ -94,7 +94,7 @@ module.exports = async (params, user, app) => { '_reply.userId': { $nin: mutedUserIds }, - '_repost.userId': { + '_renote.userId': { $nin: mutedUserIds }, } as any; @@ -121,12 +121,12 @@ module.exports = async (params, user, app) => { //#endregion // Issue query - const timeline = await Post + const timeline = await Note .find(query, { limit: limit, sort: sort }); // Serialize - return await Promise.all(timeline.map(post => pack(post, user))); + return await Promise.all(timeline.map(note => pack(note, user))); }; diff --git a/src/server/api/endpoints/posts/trend.ts b/src/server/api/endpoints/notes/trend.ts index dbee169138..48ecd5b843 100644 --- a/src/server/api/endpoints/posts/trend.ts +++ b/src/server/api/endpoints/notes/trend.ts @@ -3,10 +3,10 @@ */ const ms = require('ms'); import $ from 'cafy'; -import Post, { pack } from '../../../../models/post'; +import Note, { pack } from '../../../../models/note'; /** - * Get trend posts + * Get trend notes * * @param {any} params * @param {any} user @@ -25,9 +25,9 @@ module.exports = (params, user) => new Promise(async (res, rej) => { const [reply, replyErr] = $(params.reply).optional.boolean().$; if (replyErr) return rej('invalid reply param'); - // Get 'repost' parameter - const [repost, repostErr] = $(params.repost).optional.boolean().$; - if (repostErr) return rej('invalid repost param'); + // Get 'renote' parameter + const [renote, renoteErr] = $(params.renote).optional.boolean().$; + if (renoteErr) return rej('invalid renote param'); // Get 'media' parameter const [media, mediaErr] = $(params.media).optional.boolean().$; @@ -41,7 +41,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { createdAt: { $gte: new Date(Date.now() - ms('1days')) }, - repostCount: { + renoteCount: { $gt: 0 } } as any; @@ -50,8 +50,8 @@ module.exports = (params, user) => new Promise(async (res, rej) => { query.replyId = reply ? { $exists: true, $ne: null } : null; } - if (repost != undefined) { - query.repostId = repost ? { $exists: true, $ne: null } : null; + if (renote != undefined) { + query.renoteId = renote ? { $exists: true, $ne: null } : null; } if (media != undefined) { @@ -63,17 +63,17 @@ module.exports = (params, user) => new Promise(async (res, rej) => { } // Issue query - const posts = await Post + const notes = await Note .find(query, { limit: limit, skip: offset, sort: { - repostCount: -1, + renoteCount: -1, _id: -1 } }); // Serialize - res(await Promise.all(posts.map(async post => - await pack(post, user, { detail: true })))); + res(await Promise.all(notes.map(async note => + await pack(note, user, { detail: true })))); }); |