From d1d4bf1c19d735262f65003a5596ea3760f14a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Tue, 17 Sep 2024 13:21:28 +0900 Subject: [PATCH] =?UTF-8?q?fix(api/users):=20PV=E3=83=A9=E3=83=B3=E3=82=AD?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E3=81=AB=E8=AA=B0=E3=82=82=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E5=A0=B4=E5=90=88=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20(MisskeyIO#737)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit c82bf7583ad2f378e6f2d00e48e8d2bcfcf569e1) --- .../backend/src/server/api/endpoints/users.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/users.ts b/packages/backend/src/server/api/endpoints/users.ts index 8c02b9ed54..3ba4f9e3f4 100644 --- a/packages/backend/src/server/api/endpoints/users.ts +++ b/packages/backend/src/server/api/endpoints/users.ts @@ -73,10 +73,10 @@ export default class extends Endpoint { // eslint- query.andWhere('user.host = :hostname', { hostname: ps.hostname.toLowerCase() }); } - let pvUsers: { userId: string; count: number; }[] | undefined = undefined; + let pvRankedUsers: { userId: string; count: number; }[] | undefined = undefined; if (ps.sort?.endsWith('pv')) { // 直近12時間のPVランキングを取得 - pvUsers = await this.perUserPvChart.getUsersRanking( + pvRankedUsers = await this.perUserPvChart.getUsersRanking( 'hour', ps.sort.startsWith('+') ? 'DESC' : 'ASC', 12, null, ps.limit, ps.offset, ); @@ -89,8 +89,8 @@ export default class extends Endpoint { // eslint- case '-createdAt': query.orderBy('user.id', 'ASC'); break; case '+updatedAt': query.andWhere('user.updatedAt IS NOT NULL').orderBy('user.updatedAt', 'DESC'); break; case '-updatedAt': query.andWhere('user.updatedAt IS NOT NULL').orderBy('user.updatedAt', 'ASC'); break; - case '+pv': query.andWhere('user.id IN (:...userIds)', { userIds: pvUsers?.map(user => user.userId) ?? [] }); break; - case '-pv': query.andWhere('user.id IN (:...userIds)', { userIds: pvUsers?.map(user => user.userId) ?? [] }); break; + case '+pv': query.andWhere((pvRankedUsers?.length ?? 0) > 0 ? 'user.id IN (:...userIds)' : '1 = 0', { userIds: pvRankedUsers?.map(user => user.userId) ?? [] }); break; + case '-pv': query.andWhere((pvRankedUsers?.length ?? 0) > 0 ? 'user.id IN (:...userIds)' : '1 = 0', { userIds: pvRankedUsers?.map(user => user.userId) ?? [] }); break; default: query.orderBy('user.id', 'ASC'); break; } @@ -103,14 +103,14 @@ export default class extends Endpoint { // eslint- const users = await query.getMany(); if (ps.sort === '+pv') { users.sort((a, b) => { - const aPv = pvUsers?.find(u => u.userId === a.id)?.count ?? 0; - const bPv = pvUsers?.find(u => u.userId === b.id)?.count ?? 0; + const aPv = pvRankedUsers?.find(u => u.userId === a.id)?.count ?? 0; + const bPv = pvRankedUsers?.find(u => u.userId === b.id)?.count ?? 0; return bPv - aPv; }); } else if (ps.sort === '-pv') { users.sort((a, b) => { - const aPv = pvUsers?.find(u => u.userId === a.id)?.count ?? 0; - const bPv = pvUsers?.find(u => u.userId === b.id)?.count ?? 0; + const aPv = pvRankedUsers?.find(u => u.userId === a.id)?.count ?? 0; + const bPv = pvRankedUsers?.find(u => u.userId === b.id)?.count ?? 0; return aPv - bPv; }); }