Skip to content

Commit ea3c89e

Browse files
authored
Merge pull request #151 from iilj/dev/#150_ranking_v2_api
Resolves #150, migrate to ranking v2 api
2 parents 2a566c0 + a0be34e commit ea3c89e

File tree

7 files changed

+62
-29
lines changed

7 files changed

+62
-29
lines changed

src/components/ProblemDetailModal.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { ContestLink } from './ContestLink';
1515
import { SolvedCheckIcon } from './SolvedCheckIcon';
1616
import { SubmissionLink } from './SubmissionLink';
1717
import { ProblemTypeIconSpanWithName } from './ProblemTypeIcon';
18+
import { bytesLengthToString } from '../utils';
1819

1920
interface Props {
2021
show: boolean;
@@ -176,7 +177,11 @@ export const ProblemDetailModal: React.FC<Props> = (props) => {
176177
{shortestRankingProblem ? (
177178
<SubmissionLink
178179
submissionId={shortestRankingProblem.SubmissionId}
179-
submissionTitle={`#${shortestRankingProblem.SubmissionId} (${shortestRankingProblem.UserName}, ${shortestRankingProblem.Length} Bytes)`}
180+
submissionTitle={`#${
181+
shortestRankingProblem.SubmissionId
182+
} (${
183+
shortestRankingProblem.UserName
184+
}, ${bytesLengthToString(shortestRankingProblem.Length)})`}
180185
/>
181186
) : problem.Statistics &&
182187
problem.Statistics.ShortCodeSubmissionId > 0 ? (
@@ -195,7 +200,13 @@ export const ProblemDetailModal: React.FC<Props> = (props) => {
195200
{pureShortestRankingProblem ? (
196201
<SubmissionLink
197202
submissionId={pureShortestRankingProblem.SubmissionId}
198-
submissionTitle={`#${pureShortestRankingProblem.SubmissionId} (${pureShortestRankingProblem.UserName}, ${pureShortestRankingProblem.Length} Bytes)`}
203+
submissionTitle={`#${
204+
pureShortestRankingProblem.SubmissionId
205+
} (${
206+
pureShortestRankingProblem.UserName
207+
}, ${bytesLengthToString(
208+
pureShortestRankingProblem.Length
209+
)})`}
199210
/>
200211
) : problem.Statistics &&
201212
problem.Statistics.PureShortCodeSubmissionId > 0 ? (

src/interfaces/Problem.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ export type ProblemLevel = typeof ProblemLevels[number];
4242
export interface Statistics {
4343
/** 提出者数 */
4444
readonly Total: number;
45-
/** 正解者数 */
45+
/** AC 数 */
4646
readonly Solved: number;
47-
/** First Accepted 提出日時 */
47+
/** FirstAC までの秒数 */
4848
readonly FirstAcceptedTimeSecond: number;
49-
/** First Accepted 提出ID */
49+
/** FirstAC の提出 ID */
5050
readonly FirstACSubmissionId: SubmissionId;
51-
/** ショートコード 提出ID */
51+
/** ショートコードの提出 ID */
5252
readonly ShortCodeSubmissionId: SubmissionId;
53-
/** 純ショートコード 提出ID */
53+
/** 純ショートコードの提出 ID */
5454
readonly PureShortCodeSubmissionId: SubmissionId;
55-
/** 最速コード 提出ID */
55+
/** 最速コードの提出ID */
5656
readonly FastSubmissionId: SubmissionId;
5757
}
5858

src/interfaces/RankingProblem.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ export interface RankingProblem {
1616
readonly SubmitterId: UserId;
1717
/** 提出者名 */
1818
readonly UserName: UserName;
19-
/** ソースコード長 */
20-
readonly Length: number;
19+
/** ソースコード長, nullable */
20+
readonly Length: number | null;
2121
/** 言語ID */
2222
readonly LangId: LangId;
2323
}

src/pages/ListPage/ListTable.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
import { ProblemDetailModal } from '../../components/ProblemDetailModal';
2929
import { useNavigate } from 'react-router';
3030
import { useSearchParams } from 'react-router-dom';
31-
import { getHeader } from '../../utils';
31+
import { bytesLengthToString, getHeader } from '../../utils';
3232

3333
export type FilterState = 'All' | 'Only Trying' | 'Only AC';
3434

@@ -228,7 +228,9 @@ export const ListTable: React.FC<Props> = (props) => {
228228
return shortestRankingProblem ? (
229229
<SubmissionLink
230230
submissionId={shortestRankingProblem.SubmissionId}
231-
submissionTitle={`${shortestRankingProblem.UserName} (${shortestRankingProblem.Length} Bytes)`}
231+
submissionTitle={`${
232+
shortestRankingProblem.UserName
233+
} (${bytesLengthToString(shortestRankingProblem.Length)})`}
232234
/>
233235
) : (
234236
<></>
@@ -245,7 +247,9 @@ export const ListTable: React.FC<Props> = (props) => {
245247
return pureShortestRankingProblem ? (
246248
<SubmissionLink
247249
submissionId={pureShortestRankingProblem.SubmissionId}
248-
submissionTitle={`${pureShortestRankingProblem.UserName} (${pureShortestRankingProblem.Length} Bytes)`}
250+
submissionTitle={`${
251+
pureShortestRankingProblem.UserName
252+
} (${bytesLengthToString(pureShortestRankingProblem.Length)})`}
249253
/>
250254
) : (
251255
<></>

src/pages/ProblemDetailPage/index.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { ContestLink } from '../../components/ContestLink';
2626
import { ProblemTypeIconSpanWithName } from '../../components/ProblemTypeIcon';
2727
import { TabbedDifficultyChart } from './TabbedDifficultyChart';
2828
import { useResetScroll } from '../../utils/UseResetScroll';
29-
import { getHeader } from '../../utils';
29+
import { bytesLengthToString, getHeader } from '../../utils';
3030

3131
const initialUniversalState = {
3232
problem: {} as Problem,
@@ -233,7 +233,11 @@ export const ProblemDetailPage: React.FC = () => {
233233
{shortestRankingProblem ? (
234234
<SubmissionLink
235235
submissionId={shortestRankingProblem.SubmissionId}
236-
submissionTitle={`#${shortestRankingProblem.SubmissionId} (${shortestRankingProblem.UserName}, ${shortestRankingProblem.Length} Bytes)`}
236+
submissionTitle={`#${
237+
shortestRankingProblem.SubmissionId
238+
} (${
239+
shortestRankingProblem.UserName
240+
}, ${bytesLengthToString(shortestRankingProblem.Length)})`}
237241
/>
238242
) : problem.Statistics &&
239243
problem.Statistics.ShortCodeSubmissionId > 0 ? (
@@ -252,7 +256,13 @@ export const ProblemDetailPage: React.FC = () => {
252256
{pureShortestRankingProblem ? (
253257
<SubmissionLink
254258
submissionId={pureShortestRankingProblem.SubmissionId}
255-
submissionTitle={`#${pureShortestRankingProblem.SubmissionId} (${pureShortestRankingProblem.UserName}, ${pureShortestRankingProblem.Length} Bytes)`}
259+
submissionTitle={`#${
260+
pureShortestRankingProblem.SubmissionId
261+
} (${
262+
pureShortestRankingProblem.UserName
263+
}, ${bytesLengthToString(
264+
pureShortestRankingProblem.Length
265+
)})`}
256266
/>
257267
) : problem.Statistics &&
258268
problem.Statistics.PureShortCodeSubmissionId > 0 ? (

src/utils/TypedCachedApiClient.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { User, UserName } from '../interfaces/User';
77
import { OpenContests } from './OpenContest';
88

99
const BASE_URL = 'https://yukicoder.me';
10-
const STATIC_API_BASE_URL = `${BASE_URL}/api/v1`;
10+
const STATIC_API_BASE_URL_V1 = `${BASE_URL}/api/v1`;
11+
const STATIC_API_BASE_URL_V2 = `${BASE_URL}/api/v2`;
1112

1213
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1314
const assertResultIsValid = (obj: any): void => {
@@ -26,30 +27,30 @@ const fetchJson = async <T>(url: string): Promise<T> => {
2627
export type UserParam = 'id' | 'name' | 'twitter';
2728

2829
const fetchContests = () =>
29-
fetchJson<Contest[]>(`${STATIC_API_BASE_URL}/contest/past`);
30+
fetchJson<Contest[]>(`${STATIC_API_BASE_URL_V1}/contest/past`);
3031
const fetchCurrentContests = () =>
31-
fetchJson<Contest[]>(`${STATIC_API_BASE_URL}/contest/current`);
32+
fetchJson<Contest[]>(`${STATIC_API_BASE_URL_V1}/contest/current`);
3233
const fetchProblems = () =>
33-
fetchJson<Problem[]>(`${STATIC_API_BASE_URL}/problems`);
34+
fetchJson<Problem[]>(`${STATIC_API_BASE_URL_V1}/problems`);
3435
const fetchLanguages = () =>
35-
fetchJson<Language[]>(`${STATIC_API_BASE_URL}/languages`);
36+
fetchJson<Language[]>(`${STATIC_API_BASE_URL_V1}/languages`);
3637
const fetchGolferRanking = () =>
37-
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL}/ranking/golfer`);
38+
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL_V2}/ranking/golfer`);
3839
const fetchGolferRankingPure = () =>
39-
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL}/ranking/golfer/pure`);
40+
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL_V2}/ranking/golfer/pure`);
4041
const fetchSpeederRanking = () =>
41-
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL}/ranking/speeder`);
42+
fetchJson<RankingProblem[]>(`${STATIC_API_BASE_URL_V2}/ranking/speeder`);
4243
const fetchGolferRankingPureLangId = (landId: LangId) =>
4344
fetchJson<RankingProblem[]>(
44-
`${STATIC_API_BASE_URL}/ranking/golfer/pure/${landId}`
45+
`${STATIC_API_BASE_URL_V2}/ranking/golfer/pure/${landId}`
4546
);
4647
const fetchUserInfo = (param: UserParam, user: UserName) =>
4748
fetchJson<User>(
48-
`${STATIC_API_BASE_URL}/user/${param}/${encodeURIComponent(user)}`
49+
`${STATIC_API_BASE_URL_V1}/user/${param}/${encodeURIComponent(user)}`
4950
);
5051
const fetchSolvedProblems = (param: UserParam, user: UserName) =>
5152
fetchJson<SolvedProblem[]>(
52-
`${STATIC_API_BASE_URL}/solved/${param}/${encodeURIComponent(user)}`
53+
`${STATIC_API_BASE_URL_V1}/solved/${param}/${encodeURIComponent(user)}`
5354
).then((solvedProblems) =>
5455
solvedProblems.map((solvedProblem) => {
5556
solvedProblem.First = false;
@@ -58,15 +59,17 @@ const fetchSolvedProblems = (param: UserParam, user: UserName) =>
5859
);
5960
const fetchFirstSolvedProblems = (param: UserParam, user: UserName) =>
6061
fetchJson<FirstSolvedProblem[]>(
61-
`${STATIC_API_BASE_URL}/solved/${param}/${encodeURIComponent(user)}/first`
62+
`${STATIC_API_BASE_URL_V1}/solved/${param}/${encodeURIComponent(
63+
user
64+
)}/first`
6265
).then((solvedProblems) =>
6366
solvedProblems.map((solvedProblem) => {
6467
solvedProblem.First = true;
6568
return solvedProblem;
6669
})
6770
);
6871
const fetchSingleProblem = (problemId: ProblemId) =>
69-
fetchJson<Problem>(`${STATIC_API_BASE_URL}/problems/${problemId}`);
72+
fetchJson<Problem>(`${STATIC_API_BASE_URL_V1}/problems/${problemId}`);
7073

7174
// //////////////////
7275
// Raw Data

src/utils/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,8 @@ const getHeaderFromNum = (num: number): string => {
221221
}
222222
};
223223
export const getHeader = (idx: number): string => getHeaderFromNum(idx + 1);
224+
225+
export const bytesLengthToString = (length: number | null): string => {
226+
if (length === null) return '??? Bytes';
227+
return `${length} Bytes`;
228+
};

0 commit comments

Comments
 (0)