|
1 | 1 | const express = require("express"); |
2 | 2 | const Contest = require("../models/contest"); |
3 | | -const { fetchContest, fetchContestRankings } = require("../services/contests"); |
4 | 3 | const router = express.Router(); |
5 | | - |
| 4 | +const rankingsController = require("../controllers/rankingsController"); |
6 | 5 | router.get("/", async (req, res) => { |
7 | 6 | try { |
8 | 7 | let contests = await Contest.find({}, { rankings: 0 }).sort({ |
9 | 8 | startTime: "desc", |
10 | 9 | }); |
11 | | - res.render("contests/index", { contests: contests }); |
12 | | - } catch (error) { |
13 | | - console.log("Error while fetching contests list: ", error); |
14 | | - res.send(error.message); |
15 | | - } |
16 | | -}); |
17 | | - |
18 | | -router.get("/contests/:contestSlug/ranking/:page", async (req, res) => { |
19 | | - try { |
20 | | - let pageCount = 25; |
21 | | - let { contestSlug, page } = req.params; |
22 | | - if (page == null) { |
23 | | - page = "1"; |
24 | | - } |
25 | | - if (!isNumeric(page)) { |
26 | | - throw Error("Invalid page number"); |
27 | | - } |
28 | | - let intPage = parseInt(page); |
29 | | - if (page % 1) { |
30 | | - intPage++; |
31 | | - } |
32 | | - page = intPage; |
33 | | - let toSkip = (page - 1) * pageCount; |
34 | | - let contests = await Contest.findOne( |
35 | | - { _id: contestSlug }, |
36 | | - { rankings: { $slice: [toSkip, pageCount] } } |
37 | | - ); |
38 | | - let totalPages = 100; |
39 | | - if (contests == null) { |
40 | | - throw Error("Invalid Contest"); |
41 | | - } |
42 | | - if (contests.num_user) { |
43 | | - totalPages = parseInt(contests.num_user / 50); |
44 | | - if ((contests.num_user / 25) % 1) { |
45 | | - totalPages++; |
46 | | - } |
47 | | - } |
48 | | - if (page > totalPages) { |
49 | | - throw Error("Page not found"); |
50 | | - } |
51 | | - res.render("contests/ranking", { contests, totalPages, page }); |
52 | | - } catch (error) { |
53 | | - console.log(error.message); |
54 | | - res.send(error.message); |
55 | | - } |
56 | | -}); |
57 | | -router.post("/contests/:contestSlug/ranking/search", async (req, res) => { |
58 | | - try { |
59 | | - console.log(req.params); |
60 | | - let { user } = req.body; |
61 | | - let contests = await Contest.find({ _id: req.params.contestSlug }); |
62 | | - let searchResult = []; |
63 | | - for (let i = 0; i < contests[0].rankings.length; i++) { |
64 | | - if (contests[0].rankings[i]._id.includes(user)) { |
65 | | - searchResult.push(contests[0].rankings[i]); |
66 | | - } |
67 | | - } |
68 | | - res.render("contests/search", { |
69 | | - searchResult, |
70 | | - contestSlug: req.params.contestSlug, |
| 10 | + res.render("index", { |
| 11 | + contests: contests, |
| 12 | + title: "Leetcode Rating Predictor", |
71 | 13 | }); |
72 | | - } catch (error) { |
73 | | - console.log(error.message); |
74 | | - res.send(error.message); |
| 14 | + } catch (err) { |
| 15 | + console.error(err); |
| 16 | + res.sendStatus(500); |
75 | 17 | } |
76 | 18 | }); |
77 | 19 |
|
78 | | -function isNumeric(value) { |
79 | | - return /^\d+$/.test(value); |
80 | | -} |
| 20 | +router.get("/contests/:contestSlug/ranking/:page", rankingsController.get); |
| 21 | +router.post("/contests/:contestSlug/ranking/search", rankingsController.search); |
| 22 | + |
81 | 23 | module.exports = router; |
0 commit comments