File size: 3,156 Bytes
3d23b0f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import { FastifyPluginAsync } from 'fastify';
import * as handlers from './handlers';
import * as schemas from './schemas';
import validateUsername from '../../shared/middlewares/validate';
import type {
StatusQuery,
UserQuery,
ContestQuery,
StandingsQuery,
ContestStatusQuery,
BlogEntryQuery,
RecentStatusQuery
} from './types';
const codeforcesRoutes: FastifyPluginAsync = async (fastify) => {
// User routes (with username validation)
fastify.get<{ Querystring: UserQuery }>(
'/rating',
{ preHandler: [validateUsername], schema: schemas.userRatingSchema },
handlers.getUserRatingHandler
);
fastify.get<{ Querystring: UserQuery }>(
'/contest-history',
{ preHandler: [validateUsername], schema: schemas.contestHistorySchema },
handlers.getContestHistoryHandler
);
fastify.get<{ Querystring: StatusQuery }>(
'/status',
{ preHandler: [validateUsername], schema: schemas.userStatusSchema },
handlers.getUserStatusHandler
);
fastify.get<{ Querystring: UserQuery }>(
'/blogs',
{ preHandler: [validateUsername], schema: schemas.userBlogsSchema },
handlers.getUserBlogsHandler
);
fastify.get<{ Querystring: UserQuery }>(
'/solved-problems',
{ preHandler: [validateUsername], schema: schemas.solvedProblemsSchema },
handlers.getSolvedProblemsHandler
);
// General platform routes
fastify.get('/contests', { schema: schemas.contestsSchema }, handlers.getContestsHandler);
fastify.get('/recent-actions', { schema: schemas.recentActionsSchema }, handlers.getRecentActionsHandler);
fastify.get('/problems', { schema: schemas.problemsSchema }, handlers.getProblemsHandler);
// Contest specific routes
fastify.get<{ Querystring: StandingsQuery }>(
'/contest/standings',
{ schema: schemas.contestStandingsSchema },
handlers.getContestStandingsHandler
);
fastify.get<{ Querystring: ContestQuery }>(
'/contest/rating-changes',
{ schema: schemas.contestRatingChangesSchema },
handlers.getContestRatingChangesHandler
);
fastify.get<{ Querystring: ContestQuery }>(
'/contest/hacks',
{ schema: schemas.contestHacksSchema },
handlers.getContestHacksHandler
);
fastify.get<{ Querystring: ContestStatusQuery }>(
'/contest/status',
{ schema: schemas.contestStatusSchema },
handlers.getContestStatusHandler
);
// Problemset routes
fastify.get<{ Querystring: RecentStatusQuery }>(
'/problemset/recent-status',
{ schema: schemas.problemsetRecentStatusSchema },
handlers.getProblemsetRecentStatusHandler
);
// Blog routes
fastify.get<{ Querystring: BlogEntryQuery }>(
'/blog/view',
{ schema: schemas.blogEntrySchema },
handlers.getBlogEntryHandler
);
fastify.get<{ Querystring: BlogEntryQuery }>(
'/blog/comments',
{ schema: schemas.blogCommentsSchema },
handlers.getBlogCommentsHandler
);
};
export default codeforcesRoutes;
|