mirror of
https://github.com/khairul169/github-leaderboard.git
synced 2025-04-28 23:49:32 +07:00
46 lines
996 B
TypeScript
46 lines
996 B
TypeScript
import {
|
|
GetLeaderboardRes,
|
|
LeaderboardRepository,
|
|
} from "@server/repository/leaderboard";
|
|
import { Hono } from "hono";
|
|
|
|
export const leaderboard = new Hono()
|
|
|
|
/**
|
|
* Get users leaderboard
|
|
*/
|
|
.get("/", async (c) => {
|
|
const query = c.req.query();
|
|
const repo = new LeaderboardRepository();
|
|
|
|
let result: GetLeaderboardRes;
|
|
|
|
switch (query.type) {
|
|
case "lang":
|
|
result = await repo.getTopLanguages();
|
|
break;
|
|
case "lang-users":
|
|
result = await repo.getTopUsersByLang(query.lang);
|
|
break;
|
|
case "user":
|
|
case "":
|
|
result = await repo.getTopUsers();
|
|
break;
|
|
default:
|
|
throw new Error("Invalid query type");
|
|
}
|
|
|
|
return c.json(result);
|
|
})
|
|
|
|
/**
|
|
* Get specific user data
|
|
*/
|
|
.get("/:username", async (c) => {
|
|
const { username } = c.req.param();
|
|
const repo = new LeaderboardRepository();
|
|
const result = await repo.getUserRank(username);
|
|
|
|
return c.json(result);
|
|
});
|