diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-11-02 03:32:24 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-11-02 03:32:24 +0900 |
| commit | 931bdc6aace5e7aa71ffdfb470e208ead78a2a53 (patch) | |
| tree | eee6d7bf5f5480b883bb601517b4d9db03f31e9f /src/server/api/endpoints/i | |
| parent | Refactoring (diff) | |
| download | sharkey-931bdc6aace5e7aa71ffdfb470e208ead78a2a53.tar.gz sharkey-931bdc6aace5e7aa71ffdfb470e208ead78a2a53.tar.bz2 sharkey-931bdc6aace5e7aa71ffdfb470e208ead78a2a53.zip | |
Refactoring, Clean up and bug fixes
Diffstat (limited to 'src/server/api/endpoints/i')
| -rw-r--r-- | src/server/api/endpoints/i/favorites.ts | 51 | ||||
| -rw-r--r-- | src/server/api/endpoints/i/notifications.ts | 78 | ||||
| -rw-r--r-- | src/server/api/endpoints/i/pin.ts | 8 | ||||
| -rw-r--r-- | src/server/api/endpoints/i/signin_history.ts | 52 | ||||
| -rw-r--r-- | src/server/api/endpoints/i/unpin.ts | 8 | ||||
| -rw-r--r-- | src/server/api/endpoints/i/update.ts | 70 |
6 files changed, 161 insertions, 106 deletions
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts index e7cf8a71a7..847ac64d9a 100644 --- a/src/server/api/endpoints/i/favorites.ts +++ b/src/server/api/endpoints/i/favorites.ts @@ -1,6 +1,7 @@ -import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import Favorite, { packMany } from '../../../../models/favorite'; import { ILocalUser } from '../../../../models/user'; +import getParams from '../../get-params'; export const meta = { desc: { @@ -10,24 +11,32 @@ export const meta = { requireCredential: true, - kind: 'favorites-read' -}; + kind: 'favorites-read', -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'); + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, + + sinceId: { + validator: $.type(ID).optional, + transform: transform, + }, - // Get 'sinceId' parameter - const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId); - if (sinceIdErr) return rej('invalid sinceId param'); + untilId: { + validator: $.type(ID).optional, + transform: transform, + } + } +}; - // Get 'untilId' parameter - const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId); - if (untilIdErr) return rej('invalid untilId param'); +export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Check if both of sinceId and untilId is specified - if (sinceId && untilId) { + if (ps.sinceId && ps.untilId) { return rej('cannot set sinceId and untilId'); } @@ -39,21 +48,23 @@ 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 }; } // Get favorites const favorites = await Favorite - .find(query, { limit, sort }); + .find(query, { + limit: ps.limit, + sort: sort + }); - // Serialize res(await packMany(favorites, user)); }); diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts index 5cc836e362..d16ba63bdc 100644 --- a/src/server/api/endpoints/i/notifications.ts +++ b/src/server/api/endpoints/i/notifications.ts @@ -1,38 +1,56 @@ -import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import Notification from '../../../../models/notification'; import Mute from '../../../../models/mute'; import { packMany } from '../../../../models/notification'; import { getFriendIds } from '../../common/get-friends'; import read from '../../common/read-notification'; import { ILocalUser } from '../../../../models/user'; +import getParams from '../../get-params'; -/** - * Get notifications - */ -export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'following' parameter - const [following = false, followingError] = - $.bool.optional.get(params.following); - if (followingError) return rej('invalid following param'); +export const meta = { + desc: { + 'ja-JP': '通知一覧を取得します。', + 'en-US': 'Get notifications.' + }, + + requireCredential: true, + + kind: 'account-read', + + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, - // Get 'markAsRead' parameter - const [markAsRead = true, markAsReadErr] = $.bool.optional.get(params.markAsRead); - if (markAsReadErr) return rej('invalid markAsRead param'); + sinceId: { + validator: $.type(ID).optional, + transform: transform, + }, - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); + untilId: { + validator: $.type(ID).optional, + transform: transform, + }, - // Get 'sinceId' parameter - const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId); - if (sinceIdErr) return rej('invalid sinceId param'); + following: { + validator: $.bool.optional, + default: false + }, - // Get 'untilId' parameter - const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId); - if (untilIdErr) return rej('invalid untilId param'); + markAsRead: { + validator: $.bool.optional, + default: true + } + } +}; + +export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Check if both of sinceId and untilId is specified - if (sinceId && untilId) { + if (ps.sinceId && ps.untilId) { return rej('cannot set sinceId and untilId'); } @@ -53,7 +71,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = _id: -1 }; - if (following) { + if (ps.following) { // ID list of the user itself and other users who the user follows const followingIds = await getFriendIds(user._id); @@ -64,29 +82,27 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = }); } - 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 notifications = await Notification .find(query, { - limit: limit, + limit: ps.limit, sort: sort }); - // Serialize res(await packMany(notifications)); // Mark all as read - if (notifications.length > 0 && markAsRead) { + if (notifications.length > 0 && ps.markAsRead) { read(user._id, notifications); } }); diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts index 44c7fe77b8..4341906a57 100644 --- a/src/server/api/endpoints/i/pin.ts +++ b/src/server/api/endpoints/i/pin.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 { ILocalUser } from '../../../../models/user'; import { pack } from '../../../../models/user'; import { addPinned } from '../../../../services/i/pin'; @@ -16,12 +16,14 @@ export const meta = { kind: 'account-write', params: { - noteId: $.type(ID).note({ + noteId: { + validator: $.type(ID), + transform: transform, desc: { 'ja-JP': '対象の投稿のID', 'en-US': 'Target note ID' } - }) + } } }; diff --git a/src/server/api/endpoints/i/signin_history.ts b/src/server/api/endpoints/i/signin_history.ts index 5a3c122f3a..df1cd34c8c 100644 --- a/src/server/api/endpoints/i/signin_history.ts +++ b/src/server/api/endpoints/i/signin_history.ts @@ -1,27 +1,37 @@ -import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import Signin, { pack } from '../../../../models/signin'; import { ILocalUser } from '../../../../models/user'; +import getParams from '../../get-params'; export const meta = { requireCredential: true, - secure: 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'); + secure: true, - // Get 'sinceId' parameter - const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId); - if (sinceIdErr) return rej('invalid sinceId param'); + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, - // Get 'untilId' parameter - const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId); - if (untilIdErr) return rej('invalid untilId param'); + sinceId: { + validator: $.type(ID).optional, + transform: transform, + }, + + untilId: { + validator: $.type(ID).optional, + transform: transform, + } + } +}; + +export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Check if both of sinceId and untilId is specified - if (sinceId && untilId) { + if (ps.sinceId && ps.untilId) { return rej('cannot set sinceId and untilId'); } @@ -33,25 +43,23 @@ 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 history = await Signin .find(query, { - limit: limit, + limit: ps.limit, sort: sort }); // Serialize - res(await Promise.all(history.map(async record => - await pack(record)))); + res(await Promise.all(history.map(record => pack(record)))); }); diff --git a/src/server/api/endpoints/i/unpin.ts b/src/server/api/endpoints/i/unpin.ts index 6c20e2771d..26ff8ccda1 100644 --- a/src/server/api/endpoints/i/unpin.ts +++ b/src/server/api/endpoints/i/unpin.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 { ILocalUser } from '../../../../models/user'; import { pack } from '../../../../models/user'; import { removePinned } from '../../../../services/i/pin'; @@ -16,12 +16,14 @@ export const meta = { kind: 'account-write', params: { - noteId: $.type(ID).note({ + noteId: { + validator: $.type(ID), + transform: transform, desc: { 'ja-JP': '対象の投稿のID', 'en-US': 'Target note ID' } - }) + } } }; diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts index 04f132c551..93d4448092 100644 --- a/src/server/api/endpoints/i/update.ts +++ b/src/server/api/endpoints/i/update.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 User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack, ILocalUser } from '../../../../models/user'; import { publishMainStream } from '../../../../stream'; import DriveFile from '../../../../models/drive-file'; @@ -19,83 +19,99 @@ export const meta = { kind: 'account-write', params: { - name: $.str.optional.nullable.pipe(isValidName).note({ + name: { + validator: $.str.optional.nullable.pipe(isValidName), desc: { 'ja-JP': '名前(ハンドルネームやニックネーム)' } - }), + }, - description: $.str.optional.nullable.pipe(isValidDescription).note({ + description: { + validator: $.str.optional.nullable.pipe(isValidDescription), desc: { 'ja-JP': 'アカウントの説明や自己紹介' } - }), + }, - location: $.str.optional.nullable.pipe(isValidLocation).note({ + location: { + validator: $.str.optional.nullable.pipe(isValidLocation), desc: { 'ja-JP': '住んでいる地域、所在' } - }), + }, - birthday: $.str.optional.nullable.pipe(isValidBirthday).note({ + birthday: { + validator: $.str.optional.nullable.pipe(isValidBirthday), desc: { 'ja-JP': '誕生日 (YYYY-MM-DD形式)' } - }), + }, - avatarId: $.type(ID).optional.nullable.note({ + avatarId: { + validator: $.type(ID).optional.nullable, + transform: transform, desc: { 'ja-JP': 'アイコンに設定する画像のドライブファイルID' } - }), + }, - bannerId: $.type(ID).optional.nullable.note({ + bannerId: { + validator: $.type(ID).optional.nullable, + transform: transform, desc: { 'ja-JP': 'バナーに設定する画像のドライブファイルID' } - }), + }, - wallpaperId: $.type(ID).optional.nullable.note({ + wallpaperId: { + validator: $.type(ID).optional.nullable, + transform: transform, desc: { 'ja-JP': '壁紙に設定する画像のドライブファイルID' } - }), + }, - isLocked: $.bool.optional.note({ + isLocked: { + validator: $.bool.optional, desc: { 'ja-JP': '鍵アカウントか否か' } - }), + }, - carefulBot: $.bool.optional.note({ + carefulBot: { + validator: $.bool.optional, desc: { 'ja-JP': 'Botからのフォローを承認制にするか' } - }), + }, - isBot: $.bool.optional.note({ + isBot: { + validator: $.bool.optional, desc: { 'ja-JP': 'Botか否か' } - }), + }, - isCat: $.bool.optional.note({ + isCat: { + validator: $.bool.optional, desc: { 'ja-JP': '猫か否か' } - }), + }, - autoWatch: $.bool.optional.note({ + autoWatch: { + validator: $.bool.optional, desc: { 'ja-JP': '投稿の自動ウォッチをするか否か' } - }), + }, - alwaysMarkNsfw: $.bool.optional.note({ + alwaysMarkNsfw: { + validator: $.bool.optional, desc: { 'ja-JP': 'アップロードするメディアをデフォルトで「閲覧注意」として設定するか' } - }), + }, } }; |