Files
nuitdelinfo2023/api/routes/leaderboard.js
2023-12-07 20:35:55 +01:00

40 lines
1.3 KiB
JavaScript

/* eslint-disable no-undef */
import express from 'express';
import { pool } from '../modules/database.js';
import { requestLimiter, respondWithStatus, respondWithStatusJSON } from '../modules/requestHandler.js';
const router = express.Router();
router.get('/', requestLimiter, async (req, res) => {
try {
const [rows] = await pool.execute('SELECT * FROM users');
if (!rows.length) return await respondWithStatus(res, 404, 'There are no users');
return await respondWithStatusJSON(res, 200, {
message: 'Successfully retrieved users',
users: rows,
});
}
catch (error) {
console.error(error);
return await respondWithStatus(res, 500, 'An error has occured');
}
});
router.get('/:username', requestLimiter, async (req, res) => {
try {
const [rows] = await pool.execute('SELECT u.*, (SELECT COUNT(*) + 1 FROM users AS uu WHERE uu.score > u.score) AS rank FROM users AS u WHERE username = ? LIMIT 1', [req.params.username]);
if (!rows.length) return await respondWithStatus(res, 404, 'There are no users');
return await respondWithStatusJSON(res, 200, {
message: 'Successfully retrieved user',
users: rows[0],
});
}
catch (error) {
console.error(error);
return await respondWithStatus(res, 500, 'An error has occured');
}
});
export default router;