File size: 2,627 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
import { FastifyPluginAsync } from 'fastify';
import * as handlers from '../handlers';
import * as schemas from '../schemas';
import validateUsername from '../../../shared/middlewares/validate';

const userRoutes: FastifyPluginAsync = async (fastify) => {
    fastify.addHook('preHandler', validateUsername);

    fastify.get<{ Params: { username: string } }>(
        '/:username',
        { schema: schemas.userDetailsSchema },
        handlers.getUserDetailsHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/badges',
        { schema: schemas.userBadgesSchema },
        handlers.getUserBadgesHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/solved',
        { schema: schemas.userSolvedSchema },
        handlers.getUserSolvedHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/contest',
        { schema: schemas.userContestSchema },
        handlers.getUserContestHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/contest/history',
        { schema: schemas.userContestHistorySchema },
        handlers.getUserContestHistoryHandler
    );

    fastify.get<{ Params: { username: string }; Querystring: { limit?: string } }>(
        '/:username/submission',
        { schema: schemas.userSubmissionSchema },
        handlers.getUserSubmissionHandler
    );

    fastify.get<{ Params: { username: string }; Querystring: { limit?: string } }>(
        '/:username/accepted-submission',
        { schema: { ...schemas.userSubmissionSchema, summary: 'Get user accepted submissions' } },
        handlers.getUserAcSubmissionHandler
    );

    fastify.get<{ Params: { username: string }; Querystring: { year?: string } }>(
        '/:username/calendar',
        { schema: schemas.userCalendarSchema },
        handlers.getUserCalendarHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/skill',
        { schema: schemas.userSkillSchema },
        handlers.getUserSkillHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/profile',
        { schema: schemas.userProfileSchema },
        handlers.getUserProfileHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/language',
        { schema: schemas.userLanguageSchema },
        handlers.getUserLanguageHandler
    );

    fastify.get<{ Params: { username: string } }>(
        '/:username/progress',
        { schema: schemas.userProgressSchema },
        handlers.getUserProgressHandler
    );
};

export default userRoutes;