feat: add Status API
This commit is contained in:
parent
8b2e0ad894
commit
5a85de3268
96
src/app/services/status.ts
Normal file
96
src/app/services/status.ts
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
import type { Meta, WithCount, Wrap } from "./base";
|
||||||
|
import type { SubmissionInfo } from "./submission";
|
||||||
|
import { api } from "./api";
|
||||||
|
|
||||||
|
export enum Verdict {
|
||||||
|
Accepted,
|
||||||
|
WrongAnswer,
|
||||||
|
JuryFailed,
|
||||||
|
PartialCorrect,
|
||||||
|
TimeLimitExceeded,
|
||||||
|
MemoryLimitExceeded,
|
||||||
|
RuntimeError,
|
||||||
|
CompileError,
|
||||||
|
SystemError,
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TaskResultInfo {
|
||||||
|
id: number;
|
||||||
|
message: string;
|
||||||
|
points: number;
|
||||||
|
runtime: {
|
||||||
|
real_time: number;
|
||||||
|
cpu_time: number;
|
||||||
|
memory: number;
|
||||||
|
};
|
||||||
|
verdict: Verdict;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ContextInfo {
|
||||||
|
message: string;
|
||||||
|
compile_message: string;
|
||||||
|
tasks: TaskResultInfo[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StatusInfo {
|
||||||
|
meta: Meta;
|
||||||
|
submission: SubmissionInfo;
|
||||||
|
problem_version_id: number;
|
||||||
|
context: ContextInfo;
|
||||||
|
point: number;
|
||||||
|
is_enabled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SubmissionWithPoint {
|
||||||
|
submission: SubmissionInfo;
|
||||||
|
point: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryRequest {
|
||||||
|
pid?: number;
|
||||||
|
uid?: number;
|
||||||
|
offset?: number;
|
||||||
|
limit: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type QueryResponse = WithCount<SubmissionWithPoint>;
|
||||||
|
|
||||||
|
export interface QueryBySubmissionRequest {
|
||||||
|
sid: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryByVersionRequest {
|
||||||
|
pvid: number;
|
||||||
|
offset?: number;
|
||||||
|
limit: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryByVersionResponse {
|
||||||
|
count: number;
|
||||||
|
status: StatusInfo[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const statusApi = api.injectEndpoints({
|
||||||
|
endpoints: (builder) => ({
|
||||||
|
search: builder.query<Wrap<QueryResponse>, QueryRequest>({
|
||||||
|
query: (data: QueryRequest) => ({
|
||||||
|
url: "/status/query",
|
||||||
|
method: "POST",
|
||||||
|
body: data,
|
||||||
|
}),
|
||||||
|
providesTags: [{ type: "Status", id: "Search" }],
|
||||||
|
}),
|
||||||
|
detail: builder.query<Wrap<StatusInfo>, QueryBySubmissionRequest>({
|
||||||
|
query: (data: QueryBySubmissionRequest) => ({
|
||||||
|
url: "/status/query/submission",
|
||||||
|
method: "POST",
|
||||||
|
body: data,
|
||||||
|
}),
|
||||||
|
// NOTE: we're tracing submission ID here, when rejudge is fired, clear it
|
||||||
|
providesTags: (result) => (result ? [{ type: "Status", id: result.body.submission.meta.ID }] : []),
|
||||||
|
}),
|
||||||
|
// TODO: admin endpoints: detailByVersion
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const { useSearchQuery, useDetailQuery } = statusApi;
|
Loading…
Reference in New Issue
Block a user