From 82bec76cd4e1fc8fb3fea0b7c6a60c02707f3caf Mon Sep 17 00:00:00 2001 From: taichanne30 Date: Sat, 2 Mar 2024 15:18:40 +0900 Subject: [PATCH] =?UTF-8?q?fix(backend):=20DB=E3=83=95=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=90=E3=83=83=E3=82=AF=E6=9C=89=E5=8A=B9=E6=99=82?= =?UTF-8?q?=E3=80=81=E8=A4=87=E6=95=B0=E3=81=AEFTT=E3=82=BD=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=8B=E3=82=89=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4=E3=83=B3=E3=81=A7?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E6=BC=8F=E3=82=8C=E3=81=8C=E8=B5=B7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E7=8F=BE=E8=B1=A1=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/core/FanoutTimelineEndpointService.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/core/FanoutTimelineEndpointService.ts b/packages/backend/src/core/FanoutTimelineEndpointService.ts index 9c239b4dfc..dab9f74f76 100644 --- a/packages/backend/src/core/FanoutTimelineEndpointService.ts +++ b/packages/backend/src/core/FanoutTimelineEndpointService.ts @@ -66,8 +66,15 @@ export class FanoutTimelineEndpointService { const redisResult = await this.fanoutTimelineService.getMulti(ps.redisTimelines, ps.untilId, ps.sinceId); + // 取得したredisResultのうち、2つ以上ソースがあり、1つでも空であればDBにフォールバックする + shouldFallbackToDb = ps.useDbFallback && (redisResult.length > 1 && redisResult.some(ids => ids.length === 0)); + + // 取得したresultの中で最古のIDのうち、最も新しいものを取得 + // shouldPrependがtrueの場合は最も新しいものを、falseの場合は最も古いものを取得 + const thresholdId = shouldPrepend ? redisResult.map(ids => ids[ids.length - 1]).sort(idCompare)[0] : redisResult.map(ids => ids[0]).sort(idCompare)[0]; + // TODO: いい感じにgetMulti内でソート済だからuniqするときにredisResultが全てソート済なのを利用して再ソートを避けたい - const redisResultIds = Array.from(new Set(redisResult.flat(1))); + const redisResultIds = shouldFallbackToDb ? [] : Array.from(new Set(redisResult.flat(1))).filter(id => idCompare(id, thresholdId) === 1); redisResultIds.sort(idCompare); noteIds = redisResultIds.slice(0, ps.limit);