Skip to content

Commit 21e116e

Browse files
committed
feat: add full overview page for all rankings
1 parent 327b515 commit 21e116e

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

src/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { setupExpressMiddleware } from './handlers/middleware';
2626
import { setupLoginRoutes } from './routes/login';
2727
import { setupHomeRoutes } from './routes/home';
2828
import { setupCoalitionRoutes } from './routes/coalitions';
29+
import { setupRankingRoutes } from './routes/rankings';
2930
import { setupProfileRoutes } from './routes/profile';
3031
import { setupResultsRoutes } from './routes/results';
3132
import { setupChartRoutes } from './routes/charts';
@@ -112,6 +113,7 @@ const main = async () => {
112113
setupLoginRoutes(app, prisma);
113114
setupHomeRoutes(app, prisma);
114115
setupCoalitionRoutes(app, prisma);
116+
setupRankingRoutes(app, prisma);
115117
setupProfileRoutes(app, prisma);
116118
setupResultsRoutes(app, prisma);
117119
setupChartRoutes(app, prisma);

src/routes/rankings.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Express } from 'express';
2+
import passport from 'passport';
3+
import { PrismaClient } from '@prisma/client';
4+
import { getRanking } from '../utils';
5+
6+
export const setupRankingRoutes = function(app: Express, prisma: PrismaClient): void {
7+
app.get('/rankings/:ranking_type', passport.authenticate('session', {
8+
keepSessionInfo: true,
9+
}), async (req, res) => {
10+
const rankingType = await prisma.codamCoalitionRanking.findUnique({
11+
where: {
12+
type: req.params.ranking_type,
13+
},
14+
});
15+
if (!rankingType) {
16+
return res.status(404).send('Ranking type not found');
17+
}
18+
const ranking = await getRanking(prisma, rankingType.type, new Date(), 1000);
19+
return res.render('ranking.njk', {
20+
pageranking: ranking,
21+
rankingTitle: rankingType.name,
22+
rankingDescription: rankingType.description,
23+
coalitionColored: true,
24+
});
25+
});
26+
};

templates/home.njk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@
117117
{# if no rankings, display a message #}
118118
{% if rankings[rankingType.type] | length == 0 %}
119119
<p class="text-muted p-4"><i>No rankings available (yet).</i></p>
120+
{% else %}
121+
<p class="m-2 text-end"><a href="/rankings/{{ rankingType.type }}">View full rankings</a></p>
120122
{% endif %}
121123
</div>
122124
</div>

templates/ranking.njk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
<h4 class="card-title mb-0">{{ rankingTitle }}</h4>
1313
</div>
1414
<div class="card-body p-0">
15+
{% if rankingDescription %}
16+
<p class="p-4 mb-0"><b>{{ rankingDescription | striptags(true) | escape | nl2br }}</b></p>
17+
{% endif %}
18+
{# rankings table #}
1519
<table class="table {{ 'table-striped' if not coalitionColored else 'coalition-colored' }} mb-0">
1620
<tbody>
1721
{% for ranking in pageranking %}

0 commit comments

Comments
 (0)