File size: 4,657 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
export const userRatingSchema = {
    summary: 'Get User Rating',
    description: 'Fetches AtCoder user rating, rank, and platform details',
    tags: ['AtCoder'],
    querystring: {
        type: 'object',
        properties: {
            username: { type: 'string', description: 'AtCoder username' },
        },
        required: ['username'],
    },
    response: {
        200: {
            type: 'object',
            properties: {
                username: { type: 'string' },
                display_name: { type: 'string' },
                platform: { type: 'string' },
                rating: { type: 'number' },
                max_rating: { type: 'number' },
                level: { type: 'string' },
                rank: { type: 'string' },
                contests_participated: { type: 'number' },
                last_competed: { type: 'string' },
                kyu: { type: 'string' },
                country: { type: 'string' },
                birth_year: { type: 'string' },
                avatar: { type: 'string' },
                rating_history: {
                    type: 'array',
                    items: {
                        type: 'object',
                        properties: {
                            IsRated: { type: 'boolean' },
                            Place: { type: 'number' },
                            OldRating: { type: 'number' },
                            NewRating: { type: 'number' },
                            Performance: { type: 'number' },
                            InnerPerformance: { type: 'number' },
                            ContestScreenName: { type: 'string' },
                            ContestName: { type: 'string' },
                            ContestNameEn: { type: 'string' },
                            EndTime: { type: 'string' },
                        }
                    }
                }
            }
        }
    }
};

export const userHistorySchema = {
    summary: 'Get User History',
    description: 'Fetches AtCoder user rating history directly from the JSON endpoint',
    tags: ['AtCoder'],
    querystring: {
        type: 'object',
        properties: {
            username: { type: 'string', description: 'AtCoder username' },
        },
        required: ['username'],
    },
    response: {
        200: {
            type: 'array',
            items: {
                type: 'object',
                properties: {
                    IsRated: { type: 'boolean' },
                    Place: { type: 'number' },
                    OldRating: { type: 'number' },
                    NewRating: { type: 'number' },
                    Performance: { type: 'number' },
                    InnerPerformance: { type: 'number' },
                    ContestScreenName: { type: 'string' },
                    ContestName: { type: 'string' },
                    ContestNameEn: { type: 'string' },
                    EndTime: { type: 'string' },
                }
            }
        }
    }
};

export const contestStandingsSchema = {
    summary: 'Get Contest Standings',
    description: 'Fetches AtCoder contest standings in JSON format',
    tags: ['AtCoder'],
    querystring: {
        type: 'object',
        properties: {
            contestId: { type: 'string', description: 'AtCoder contest ID (e.g., abc300)' },
            extended: { type: 'boolean', description: 'Whether to fetch extended standings' },
        },
        required: ['contestId'],
    },
    response: {
        200: {
            type: 'object',
            additionalProperties: true
        }
    }
};

export const contestResultsSchema = {
    summary: 'Get Contest Results',
    description: 'Fetches AtCoder contest results in JSON format',
    tags: ['AtCoder'],
    querystring: {
        type: 'object',
        properties: {
            contestId: { type: 'string', description: 'AtCoder contest ID' },
        },
        required: ['contestId'],
    },
    response: {
        200: {
            type: 'object',
            additionalProperties: true
        }
    }
};

export const virtualStandingsSchema = {
    summary: 'Get Virtual Standings',
    description: 'Fetches AtCoder virtual standings in JSON format',
    tags: ['AtCoder'],
    querystring: {
        type: 'object',
        properties: {
            contestId: { type: 'string', description: 'AtCoder contest ID' },
            showGhost: { type: 'boolean', description: 'Whether to show ghost entries' },
        },
        required: ['contestId'],
    },
    response: {
        200: {
            type: 'object',
            additionalProperties: true
        }
    }
};