diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-17 01:33:15 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-10-17 01:33:15 +0900 |
| commit | 835aad44bbf7245e039227ffa48e611b3bc330f2 (patch) | |
| tree | b2432eb3f5e59b7835205eef6bad6d7bfa1802d4 /src/server/api | |
| parent | 12.92.0 (diff) | |
| download | sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.tar.gz sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.tar.bz2 sharkey-835aad44bbf7245e039227ffa48e611b3bc330f2.zip | |
feat: ユーザーのリアクション一覧を見れるように
Diffstat (limited to 'src/server/api')
| -rw-r--r-- | src/server/api/endpoints/users/reactions.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/server/api/endpoints/users/reactions.ts b/src/server/api/endpoints/users/reactions.ts new file mode 100644 index 0000000000..44d7887482 --- /dev/null +++ b/src/server/api/endpoints/users/reactions.ts @@ -0,0 +1,67 @@ +import $ from 'cafy'; +import { ID } from '@/misc/cafy-id'; +import define from '../../define'; +import { NoteReactions } from '@/models/index'; +import { makePaginationQuery } from '../../common/make-pagination-query'; +import { generateVisibilityQuery } from '../../common/generate-visibility-query'; + +export const meta = { + tags: ['users', 'reactions'], + + requireCredential: false as const, + + params: { + userId: { + validator: $.type(ID), + }, + + limit: { + validator: $.optional.num.range(1, 100), + default: 10, + }, + + sinceId: { + validator: $.optional.type(ID), + }, + + untilId: { + validator: $.optional.type(ID), + }, + + sinceDate: { + validator: $.optional.num, + }, + + untilDate: { + validator: $.optional.num, + }, + }, + + res: { + type: 'array' as const, + optional: false as const, nullable: false as const, + items: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'NoteReaction', + } + }, + + errors: { + } +}; + +export default define(meta, async (ps, me) => { + const query = makePaginationQuery(NoteReactions.createQueryBuilder('reaction'), + ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) + .andWhere(`reaction.userId = :userId`, { userId: ps.userId }) + .leftJoinAndSelect('reaction.note', 'note'); + + generateVisibilityQuery(query, me); + + const reactions = await query + .take(ps.limit!) + .getMany(); + + return await Promise.all(reactions.map(reaction => NoteReactions.pack(reaction, me, { withNote: true }))); +}); |