diff options
| author | mei23 <m@m544.net> | 2018-10-31 04:59:01 +0900 |
|---|---|---|
| committer | mei23 <m@m544.net> | 2018-10-31 04:59:01 +0900 |
| commit | 560bb6538413a1e969a1177a739b18bfa91391e3 (patch) | |
| tree | 49b9612d3810f56aa9813c9567f41c67a96cfa13 /src/server/api/endpoints/blocking | |
| parent | Implement /api/v1/instance (#3045) (diff) | |
| download | sharkey-560bb6538413a1e969a1177a739b18bfa91391e3.tar.gz sharkey-560bb6538413a1e969a1177a739b18bfa91391e3.tar.bz2 sharkey-560bb6538413a1e969a1177a739b18bfa91391e3.zip | |
blockings list
Diffstat (limited to 'src/server/api/endpoints/blocking')
| -rw-r--r-- | src/server/api/endpoints/blocking/list.ts | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/server/api/endpoints/blocking/list.ts b/src/server/api/endpoints/blocking/list.ts new file mode 100644 index 0000000000..ba1c77d2c7 --- /dev/null +++ b/src/server/api/endpoints/blocking/list.ts @@ -0,0 +1,59 @@ +import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import Blocking from '../../../../models/blocking'; +import { pack, ILocalUser } from '../../../../models/user'; + +export const meta = { + desc: { + 'ja-JP': 'ブロックしているユーザー一覧を取得します。', + 'en-US': 'Get blocking users.' + }, + + requireCredential: true, + + kind: 'following-read' +}; + +export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { + // Get 'limit' parameter + const [limit = 30, limitErr] = $.num.optional.range(1, 100).get(params.limit); + if (limitErr) return rej('invalid limit param'); + + // Get 'cursor' parameter + const [cursor = null, cursorErr] = $.type(ID).optional.get(params.cursor); + if (cursorErr) return rej('invalid cursor param'); + + // Construct query + const query = { + blockerId: me._id + } as any; + + // カーソルが指定されている場合 + if (cursor) { + query._id = { + $lt: cursor + }; + } + + // Get blockings + const blockings = await Blocking + .find(query, { + limit: limit + 1, + sort: { _id: -1 } + }); + + // 「次のページ」があるかどうか + const inStock = blockings.length === limit + 1; + if (inStock) { + blockings.pop(); + } + + // Serialize + const users = await Promise.all(blockings.map(async m => + await pack(m.blockeeId, me, { detail: true }))); + + // Response + res({ + users: users, + next: inStock ? blockings[blockings.length - 1]._id : null, + }); +}); |