144 lines
2.5 KiB
TypeScript
144 lines
2.5 KiB
TypeScript
import type { TASK_TYPE } from "./const"
|
|
|
|
export interface PromptMessage {
|
|
id: number
|
|
role: string
|
|
content: string
|
|
code_html: string | null
|
|
code_css: string | null
|
|
code_js: string | null
|
|
prompt_level?: number | null
|
|
created: string
|
|
}
|
|
|
|
export enum Role {
|
|
Super = "super",
|
|
Admin = "admin",
|
|
Normal = "normal",
|
|
}
|
|
|
|
export function getRole(role: Role) {
|
|
return {
|
|
[Role.Super]: "超级管理员",
|
|
[Role.Admin]: "管理员",
|
|
[Role.Normal]: "普通用户",
|
|
}[role]
|
|
}
|
|
|
|
export type FlagType = "red" | "blue" | "green" | "yellow" | null
|
|
|
|
export interface TutorialSlim {
|
|
display: number
|
|
title: string
|
|
is_public: boolean
|
|
}
|
|
|
|
export interface TutorialReturn extends TutorialSlim {
|
|
content: string
|
|
}
|
|
|
|
export interface TutorialIn {
|
|
display: number
|
|
title: string
|
|
content: string
|
|
}
|
|
|
|
export interface ChallengeSlim {
|
|
display: number
|
|
title: string
|
|
score: number
|
|
is_public: boolean
|
|
}
|
|
|
|
export interface ChallengeIn {
|
|
display: number
|
|
title: string
|
|
content: string
|
|
score: number
|
|
is_public: boolean
|
|
}
|
|
|
|
export interface User {
|
|
id: number
|
|
username: string
|
|
date_joined: Date
|
|
last_login: Date
|
|
role: Role
|
|
is_active: boolean
|
|
}
|
|
|
|
export interface SubmissionOut {
|
|
id: string
|
|
userid: number
|
|
username: string
|
|
task_id: number
|
|
task_display: number
|
|
task_type: TASK_TYPE
|
|
task_title: string
|
|
score: number
|
|
my_score: number
|
|
conversation_id?: string
|
|
flag?: FlagType
|
|
submit_count: number
|
|
created: Date
|
|
modified: Date
|
|
}
|
|
|
|
export interface SubmissionAll {
|
|
id: string
|
|
userid: number
|
|
username: string
|
|
task_id: number
|
|
task_display: number
|
|
task_type: TASK_TYPE
|
|
task_title: string
|
|
score: number
|
|
my_score: number
|
|
flag?: FlagType
|
|
html: ""
|
|
css: ""
|
|
js: ""
|
|
created: Date
|
|
modified: Date
|
|
}
|
|
|
|
export interface UserTag {
|
|
username: string
|
|
classname: string
|
|
}
|
|
|
|
export interface SubmissionCountBucket {
|
|
count_1: number
|
|
count_2: number
|
|
count_3: number
|
|
count_4_plus: number
|
|
}
|
|
|
|
export interface ScoreBucket {
|
|
range_1_2: number
|
|
range_2_3: number
|
|
range_3_4: number
|
|
range_4_5: number
|
|
range_5: number
|
|
}
|
|
|
|
export interface FlagStats {
|
|
red: number
|
|
blue: number
|
|
green: number
|
|
yellow: number
|
|
}
|
|
|
|
export interface TaskStatsOut {
|
|
submitted_count: number
|
|
unsubmitted_count: number
|
|
average_score: number | null
|
|
unrated_count: number
|
|
unsubmitted_users: UserTag[]
|
|
unrated_users: UserTag[]
|
|
submission_count_distribution: SubmissionCountBucket
|
|
score_distribution: ScoreBucket
|
|
flag_stats: FlagStats
|
|
classes: string[]
|
|
}
|