feat: dashboard
This commit is contained in:
@@ -3,6 +3,8 @@ import { v4 as uuidv4 } from 'uuid';
|
||||
import { ServerChannelPayload, ServerPayload } from '../cqrs/types';
|
||||
import {
|
||||
getAllPublicServers,
|
||||
getFeaturedServers,
|
||||
getTrendingServers,
|
||||
getServerById,
|
||||
getUserById,
|
||||
upsertServer,
|
||||
@@ -155,6 +157,34 @@ router.get('/', async (req, res) => {
|
||||
res.json({ servers: enrichedResults, total, limit: Number(limit), offset: Number(offset) });
|
||||
});
|
||||
|
||||
function parseDiscoveryLimit(value: unknown, fallback: number): number {
|
||||
const parsed = Number(value);
|
||||
|
||||
if (!Number.isFinite(parsed) || parsed <= 0) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return Math.min(Math.floor(parsed), 50);
|
||||
}
|
||||
|
||||
// NOTE: `/featured` and `/trending` must be registered before `/:id`,
|
||||
// otherwise Express resolves them as a server id.
|
||||
router.get('/featured', async (req, res) => {
|
||||
const limit = parseDiscoveryLimit(req.query.limit, 12);
|
||||
const servers = await getFeaturedServers(limit);
|
||||
const enrichedResults = await Promise.all(servers.map((server) => enrichServer(server)));
|
||||
|
||||
res.json({ servers: enrichedResults, total: enrichedResults.length, limit });
|
||||
});
|
||||
|
||||
router.get('/trending', async (req, res) => {
|
||||
const limit = parseDiscoveryLimit(req.query.limit, 12);
|
||||
const servers = await getTrendingServers(limit);
|
||||
const enrichedResults = await Promise.all(servers.map((server) => enrichServer(server)));
|
||||
|
||||
res.json({ servers: enrichedResults, total: enrichedResults.length, limit });
|
||||
});
|
||||
|
||||
router.post('/', async (req, res) => {
|
||||
const {
|
||||
id: clientId,
|
||||
|
||||
Reference in New Issue
Block a user