return db
.select({
count: count(),
due: sql<Date>`DATE_TRUNC('hour', ${cardSchedules.due})`,
})
.from(cards)
.innerJoin(cardSchedules, eq(cardSchedules.cardId, cards.id))
.innerJoin(decks, eq(cards.deckId, decks.id))
.where(
and(
eq(cards.userId, userId),
eq(decks.enabledForReview, true),
gte(cardSchedules.due, startHour),
lt(cardSchedules.due, endHour),
),
)
.groupBy(sql`DATE_TRUNC('hour', ${cardSchedules.due})`)
.orderBy(sql`DATE_TRUNC('hour', ${cardSchedules.due})`);
return db
.select({
count: count(),
due: sql<Date>`DATE_TRUNC('hour', ${cardSchedules.due})`,
})
.from(cards)
.innerJoin(cardSchedules, eq(cardSchedules.cardId, cards.id))
.innerJoin(decks, eq(cards.deckId, decks.id))
.where(
and(
eq(cards.userId, userId),
eq(decks.enabledForReview, true),
gte(cardSchedules.due, startHour),
lt(cardSchedules.due, endHour),
),
)
.groupBy(sql`DATE_TRUNC('hour', ${cardSchedules.due})`)
.orderBy(sql`DATE_TRUNC('hour', ${cardSchedules.due})`);