307 lines
5.6 KiB
TypeScript
307 lines
5.6 KiB
TypeScript
import type { TASK_TYPE } from "./const"
|
|
|
|
export interface PromptMessage {
|
|
id: number
|
|
role: string
|
|
source?: 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 TaskAsset {
|
|
name: string
|
|
url: string
|
|
}
|
|
|
|
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
|
|
pass_score: number | null
|
|
submitted: boolean
|
|
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
|
|
flag?: FlagType
|
|
zone?: "featured" | "low" | "pending" | null
|
|
submit_count: number
|
|
view_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: ""
|
|
submit_count: number
|
|
view_count: number
|
|
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 TopViewedItem {
|
|
username: string
|
|
classname: string
|
|
view_count: number
|
|
submission_id: string
|
|
}
|
|
|
|
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[]
|
|
top_viewed: TopViewedItem[]
|
|
}
|
|
|
|
export type GradebookTaskType = "tutorial" | "challenge"
|
|
export type GradebookGrade = "A" | "B" | "C" | "D" | "E"
|
|
|
|
export interface GradebookQuery {
|
|
classname: string
|
|
task_type?: GradebookTaskType | ""
|
|
username?: string
|
|
include_all_tasks?: boolean
|
|
}
|
|
|
|
export interface GradebookTask {
|
|
id: number
|
|
display: number
|
|
title: string
|
|
task_type: GradebookTaskType
|
|
submitted_count: number
|
|
coverage: number
|
|
included: boolean
|
|
}
|
|
|
|
export interface GradebookCell {
|
|
score: number
|
|
submitted: boolean
|
|
submission_id: string | null
|
|
}
|
|
|
|
export interface GradebookRow {
|
|
user_id: number
|
|
username: string
|
|
classname: string
|
|
rank: number
|
|
grade: GradebookGrade
|
|
scores: Record<number, GradebookCell>
|
|
tutorial_total: number
|
|
challenge_total: number
|
|
total_score: number
|
|
average_score: number | null
|
|
submitted_task_count: number
|
|
missing_task_count: number
|
|
}
|
|
|
|
export interface GradebookOut {
|
|
classname: string
|
|
classes: string[]
|
|
task_count: number
|
|
included_task_count: number
|
|
student_count: number
|
|
coverage_threshold_count: number
|
|
tasks: GradebookTask[]
|
|
rows: GradebookRow[]
|
|
}
|
|
|
|
export interface ShowcaseItem {
|
|
submission_id: string
|
|
username: string
|
|
task_title: string
|
|
task_display: number
|
|
score: number
|
|
view_count: number
|
|
html: string | null
|
|
css: string | null
|
|
js: string | null
|
|
has_prompt_chain: boolean
|
|
}
|
|
|
|
export interface AwardSection {
|
|
id: number
|
|
name: string
|
|
description: string
|
|
item_ordering: string
|
|
items: ShowcaseItem[]
|
|
}
|
|
|
|
export type ItemOrdering = "manual" | "awarded_at" | "score" | "view_count"
|
|
|
|
export interface AwardManageIn {
|
|
name: string
|
|
description: string
|
|
sort_order: number
|
|
is_active: boolean
|
|
item_ordering: ItemOrdering
|
|
}
|
|
|
|
export interface AwardManageOut extends AwardManageIn {
|
|
id: number
|
|
item_count: number
|
|
}
|
|
|
|
export interface AwardItemIn {
|
|
submission_id: string
|
|
sort_order: number
|
|
}
|
|
|
|
export interface AwardItemUpdateIn {
|
|
sort_order: number
|
|
}
|
|
|
|
export interface ShowcaseSubmissionLookupOut {
|
|
submission_id: string
|
|
username: string
|
|
task_title: string
|
|
task_display: number
|
|
score: number
|
|
view_count: number
|
|
has_prompt_chain: boolean
|
|
}
|
|
|
|
export interface AwardItemManageOut {
|
|
id: number
|
|
submission_id: string
|
|
username: string
|
|
task_title: string
|
|
task_display: number
|
|
score: number
|
|
view_count: number
|
|
sort_order: number
|
|
awarded_at: string
|
|
has_prompt_chain: boolean
|
|
}
|
|
|
|
export interface ShowcaseDetail {
|
|
submission_id: string
|
|
username: string
|
|
task_title: string
|
|
task_display: number
|
|
score: number
|
|
view_count: number
|
|
html: string | null
|
|
css: string | null
|
|
js: string | null
|
|
awards: string[]
|
|
has_prompt_chain: boolean
|
|
}
|
|
|
|
export interface PromptRound {
|
|
question: string
|
|
source: string
|
|
prompt_level: number | null
|
|
assistant_msg_id?: number | null
|
|
html: string | null
|
|
css: string | null
|
|
js: string | null
|
|
}
|