diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-11-02 12:49:08 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-11-02 12:49:08 +0900 |
| commit | a7e6b766be6b30b37839beb13f31d96b141cc25a (patch) | |
| tree | b6bf96ae808260f0aa94767835d59d25f7f889a7 /src/server/api/endpoints/notes | |
| parent | Update src/server/api/endpoints/meta.ts (diff) | |
| download | sharkey-a7e6b766be6b30b37839beb13f31d96b141cc25a.tar.gz sharkey-a7e6b766be6b30b37839beb13f31d96b141cc25a.tar.bz2 sharkey-a7e6b766be6b30b37839beb13f31d96b141cc25a.zip | |
Resolve #2623
Diffstat (limited to 'src/server/api/endpoints/notes')
| -rw-r--r-- | src/server/api/endpoints/notes/polls/recommendation.ts | 32 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/search.ts | 43 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/trend.ts | 76 |
3 files changed, 50 insertions, 101 deletions
diff --git a/src/server/api/endpoints/notes/polls/recommendation.ts b/src/server/api/endpoints/notes/polls/recommendation.ts index 9af223c010..34250a32f9 100644 --- a/src/server/api/endpoints/notes/polls/recommendation.ts +++ b/src/server/api/endpoints/notes/polls/recommendation.ts @@ -2,6 +2,7 @@ import $ from 'cafy'; import Vote from '../../../../../models/poll-vote'; import Note, { pack } from '../../../../../models/note'; import { ILocalUser } from '../../../../../models/user'; +import getParams from '../../../get-params'; export const meta = { desc: { @@ -10,16 +11,23 @@ export const meta = { }, requireCredential: true, + + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, + + offset: { + validator: $.num.optional.min(0), + default: 0 + } + } }; export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); - - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Get votes const votes = await Vote.find({ @@ -46,14 +54,14 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = $ne: null } }, { - limit: limit, - skip: offset, + limit: ps.limit, + skip: ps.offset, sort: { _id: -1 } }); - // Serialize - res(await Promise.all(notes.map(async note => - await pack(note, user, { detail: true })))); + res(await Promise.all(notes.map(note => pack(note, user, { + detail: true + })))); }); diff --git a/src/server/api/endpoints/notes/search.ts b/src/server/api/endpoints/notes/search.ts index 2755a70483..63a87c0f56 100644 --- a/src/server/api/endpoints/notes/search.ts +++ b/src/server/api/endpoints/notes/search.ts @@ -4,19 +4,36 @@ import Note from '../../../../models/note'; import { ILocalUser } from '../../../../models/user'; import { packMany } from '../../../../models/note'; import es from '../../../../db/elasticsearch'; +import getParams from '../../get-params'; -export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { - // Get 'query' parameter - const [query, queryError] = $.str.get(params.query); - if (queryError) return rej('invalid query param'); +export const meta = { + desc: { + 'ja-JP': '投稿を検索します。', + 'en-US': 'Search notes.' + }, + + requireCredential: false, + + params: { + query: { + validator: $.str + }, - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 30).get(params.limit); - if (limitErr) return rej('invalid limit param'); + offset: { + validator: $.num.optional.min(0), + default: 0 + } + } +}; + +export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); if (es == null) return rej('searching not available'); @@ -24,12 +41,12 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => index: 'misskey', type: 'note', body: { - size: limit, - from: offset, + size: ps.limit, + from: ps.offset, query: { simple_query_string: { fields: ['text'], - query: query, + query: ps.query, default_operator: 'and' } }, diff --git a/src/server/api/endpoints/notes/trend.ts b/src/server/api/endpoints/notes/trend.ts deleted file mode 100644 index 9f55ed3243..0000000000 --- a/src/server/api/endpoints/notes/trend.ts +++ /dev/null @@ -1,76 +0,0 @@ -const ms = require('ms'); -import $ from 'cafy'; -import Note, { pack } from '../../../../models/note'; -import { ILocalUser } from '../../../../models/user'; - -export const meta = { - desc: { - 'ja-JP': '人気の投稿の一覧を取得します。', - 'en-US': 'Get trend notes.' - }, - - requireCredential: true -}; - -export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); - - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); - - // Get 'reply' parameter - const [reply, replyErr] = $.bool.optional.get(params.reply); - if (replyErr) return rej('invalid reply param'); - - // Get 'renote' parameter - const [renote, renoteErr] = $.bool.optional.get(params.renote); - if (renoteErr) return rej('invalid renote param'); - - // Get 'media' parameter - const [media, mediaErr] = $.bool.optional.get(params.media); - if (mediaErr) return rej('invalid media param'); - - // Get 'poll' parameter - const [poll, pollErr] = $.bool.optional.get(params.poll); - if (pollErr) return rej('invalid poll param'); - - const query = { - _id: { $gte: new Date(Date.now() - ms('1days')) }, - renoteCount: { $gt: 0 }, - '_user.host': null - } as any; - - if (reply != undefined) { - query.replyId = reply ? { $exists: true, $ne: null } : null; - } - - if (renote != undefined) { - query.renoteId = renote ? { $exists: true, $ne: null } : null; - } - - if (media != undefined) { - query.fileIds = media ? { $exists: true, $ne: null } : null; - } - - if (poll != undefined) { - query.poll = poll ? { $exists: true, $ne: null } : null; - } - - // Issue query - const notes = await Note - .find(query, { - limit: limit, - skip: offset, - sort: { - renoteCount: -1, - _id: -1 - } - }); - - // Serialize - res(await Promise.all(notes.map(async note => - await pack(note, user, { detail: true })))); -}); |