Add ChatRepository and chat factories

This commit is contained in:
Kalle
2026-08-22 17:26:10 +03:00
parent d7047c33e9
commit 3bfc5192fd
6 changed files with 404 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import * as LogInLinkRepository from "~/features/auth/LogInLinkRepository.server
import * as BadgeRepository from "~/features/badges/BadgeRepository.server";
import * as BuildRepository from "~/features/builds/BuildRepository.server";
import * as CalendarRepository from "~/features/calendar/CalendarRepository.server";
import * as ChatRepository from "~/features/chat/ChatRepository.server";
import * as FriendRepository from "~/features/friends/FriendRepository.server";
import * as ImageRepository from "~/features/img-upload/ImageRepository.server";
import * as LeaderboardRepository from "~/features/leaderboards/LeaderboardRepository.server";
@@ -232,6 +233,11 @@ export function buildCases(fx: Fixtures): {
(eventId) => CalendarRepository.findTopThreeResultsByEventIds([eventId]),
);
// ChatRepository
add("ChatRepository.findAllMessagesByRoomId", fx.heavyChatRoomId, (roomId) =>
ChatRepository.findAllMessagesByRoomId(roomId),
);
// FriendRepository
add("FriendRepository.findByUserIdWithActivity", fx.heavyFriendPair, (pair) =>
FriendRepository.findByUserIdWithActivity(pair.userId),

View File

@@ -41,6 +41,8 @@ export interface Fixtures {
recentTournamentIds: number[] | null;
heavyTeam: { id: number; customUrl: string; memberUserId: number } | null;
heavyCalendarEventId: number | null;
/** Chat room with the most messages. Null until the prod copy has post-migration chat data. */
heavyChatRoomId: number | null;
resultsEventId: number | null;
calendarAuthorId: number | null;
calendarWindow: { startTime: Date; endTime: Date } | null;
@@ -150,6 +152,7 @@ export async function resolveFixtures(): Promise<Fixtures> {
recentTournamentIds: await resolveRecentTournamentIds(),
heavyTeam: await resolveHeavyTeam(),
heavyCalendarEventId: await resolveHeavyCalendarEventId(),
heavyChatRoomId: await resolveHeavyChatRoomId(),
resultsEventId: await resolveResultsEventId(),
calendarAuthorId: await resolveCalendarAuthorId(),
calendarWindow: await resolveCalendarWindow(),
@@ -595,6 +598,18 @@ async function resolveCalendarAuthorId() {
return row?.authorId ?? null;
}
async function resolveHeavyChatRoomId() {
const row = await db
.selectFrom("ChatMessage")
.select(({ fn }) => ["roomId", fn.countAll<number>().as("count")])
.groupBy("roomId")
.orderBy("count", "desc")
.limit(1)
.executeTakeFirst();
return row?.roomId ?? null;
}
async function resolveCalendarWindow() {
const row = await db
.selectFrom("CalendarEventDate")