Files
Toju/server/src/cqrs/queries/handlers/getTrendingServers.ts
2026-06-05 01:51:03 +02:00

17 lines
821 B
TypeScript

import { DataSource } from 'typeorm';
import { ServerEntity } from '../../../entities';
import { rowToServer } from '../../mappers';
import { loadServerRelationsMap } from '../../relations';
import { loadMembershipCounts, rankTrendingServers } from './server-ranking.util';
const DEFAULT_LIMIT = 12;
export async function handleGetTrendingServers(dataSource: DataSource, limit = DEFAULT_LIMIT) {
const rows = await dataSource.getRepository(ServerEntity).find({ where: { isPrivate: 0 } });
const counts = await loadMembershipCounts(dataSource, rows.map((row) => row.id));
const ranked = rankTrendingServers(rows, counts, limit);
const relationsByServerId = await loadServerRelationsMap(dataSource, ranked.map((row) => row.id));
return ranked.map((row) => rowToServer(row, relationsByServerId.get(row.id)));
}