17 lines
821 B
TypeScript
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)));
|
|
}
|