[api] fix a few other queries > 100 items

This commit is contained in:
Devin Zuczek
2026-10-16 13:30:17 -04:00
parent 6d905e1811
commit f24e35224c
2 changed files with 8 additions and 9 deletions
+4 -3
View File
@@ -297,10 +297,11 @@ export async function getCustomAvatarItems(
ids: string[] ids: string[]
): Promise<CustomAvatarItem[]> { ): Promise<CustomAvatarItem[]> {
if (ids.length === 0) return [] if (ids.length === 0) return []
const placeholders = ids.map((_, i) => `?${i + 1}`).join(', ')
const { results } = await db const { results } = await db
.prepare(`SELECT data FROM custom_avatar_item WHERE custom_avatar_item_id IN (${placeholders})`) .prepare(
.bind(...ids) `SELECT data FROM custom_avatar_item WHERE custom_avatar_item_id IN (SELECT value FROM json_each(?1))`
)
.bind(JSON.stringify(ids))
.all<Row>() .all<Row>()
const byId = new Map(results.map(toDto).map((item) => [item.CustomAvatarItemId, item])) const byId = new Map(results.map(toDto).map((item) => [item.CustomAvatarItemId, item]))
return ids.flatMap((id) => byId.get(id) ?? []) return ids.flatMap((id) => byId.get(id) ?? [])
+4 -6
View File
@@ -926,10 +926,9 @@ export async function getEventById(db: D1Database, eventId: number): Promise<Pla
*/ */
export async function getEventsByIds(db: D1Database, ids: number[]): Promise<PlayerEvent[]> { export async function getEventsByIds(db: D1Database, ids: number[]): Promise<PlayerEvent[]> {
if (ids.length === 0) return [] if (ids.length === 0) return []
const placeholders = ids.map((_, i) => `?${i + 1}`).join(', ')
const { results } = await db const { results } = await db
.prepare(`SELECT data FROM event WHERE id IN (${placeholders})`) .prepare(`SELECT data FROM event WHERE id IN (SELECT value FROM json_each(?1))`)
.bind(...ids) .bind(JSON.stringify(ids))
.all<EventRow>() .all<EventRow>()
const byId = new Map<number, PlayerEvent>() const byId = new Map<number, PlayerEvent>()
for (const r of results) { for (const r of results) {
@@ -1027,10 +1026,9 @@ export async function getPublicEventsByPlayer(
*/ */
export async function getEventsByClubs(db: D1Database, clubIds: number[]): Promise<PlayerEvent[]> { export async function getEventsByClubs(db: D1Database, clubIds: number[]): Promise<PlayerEvent[]> {
if (clubIds.length === 0) return [] if (clubIds.length === 0) return []
const placeholders = clubIds.map((_, i) => `?${i + 1}`).join(', ')
const { results } = await db const { results } = await db
.prepare(`SELECT data FROM event WHERE club_id IN (${placeholders})`) .prepare(`SELECT data FROM event WHERE club_id IN (SELECT value FROM json_each(?1))`)
.bind(...clubIds) .bind(JSON.stringify(clubIds))
.all<EventRow>() .all<EventRow>()
return results.map((r) => JSON.parse(r.data) as PlayerEvent).sort(bySoonest) return results.map((r) => JSON.parse(r.data) as PlayerEvent).sort(bySoonest)
} }