From 835aad44bbf7245e039227ffa48e611b3bc330f2 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 17 Oct 2021 01:33:15 +0900 Subject: feat: ユーザーのリアクション一覧を見れるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/api/endpoints/users/reactions.ts | 67 +++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/server/api/endpoints/users/reactions.ts (limited to 'src/server/api/endpoints/users') 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 }))); +}); -- cgit v1.2.3-freya From dec69cc67b060eec244eb8d2df7dcd362359514b Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 17 Oct 2021 16:26:35 +0900 Subject: enhance: ユーザー検索の精度を強化 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + src/client/components/form/radios.vue | 12 -- src/client/pages/explore.vue | 19 ++- .../endpoints/users/search-by-username-and-host.ts | 9 +- src/server/api/endpoints/users/search.ts | 127 +++++++++++++-------- 5 files changed, 104 insertions(+), 65 deletions(-) (limited to 'src/server/api/endpoints/users') diff --git a/CHANGELOG.md b/CHANGELOG.md index 1139707b5a..ef9934f6d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,9 @@ ### Improvements - クライアント: ユーザーのリアクション一覧を見れるように +- クライアント: ユーザー検索の精度を強化 - API: ユーザーのリアクション一覧を取得する users/reactions を追加 +- API: users/search および users/search-by-username-and-host を強化 ### Bugfixes diff --git a/src/client/components/form/radios.vue b/src/client/components/form/radios.vue index 1d3d80172a..998a738202 100644 --- a/src/client/components/form/radios.vue +++ b/src/client/components/form/radios.vue @@ -22,7 +22,6 @@ export default defineComponent({ } }, render() { - const label = this.$slots.desc(); let options = this.$slots.default(); // なぜかFragmentになることがあるため @@ -31,7 +30,6 @@ export default defineComponent({ return h('div', { class: 'novjtcto' }, [ - h('div', { class: 'label' }, label), ...options.map(option => h(MkRadio, { key: option.key, value: option.props.value, @@ -45,16 +43,6 @@ export default defineComponent({