init + api use
This commit is contained in:
141
src/types/challenge.ts
Normal file
141
src/types/challenge.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
// Challenge Service Types
|
||||
|
||||
export interface ChallengeUser {
|
||||
_id: string
|
||||
id: string
|
||||
nickname: string
|
||||
createdAt: string
|
||||
}
|
||||
|
||||
export interface ChallengeTask {
|
||||
_id: string
|
||||
id: string
|
||||
title: string
|
||||
description: string // Markdown
|
||||
hiddenInstructions?: string // Только для преподавателей
|
||||
creator?: {
|
||||
sub: string
|
||||
preferred_username: string
|
||||
email?: string
|
||||
} // Только для преподавателей
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export interface ChallengeChain {
|
||||
_id: string
|
||||
id: string
|
||||
name: string
|
||||
tasks: ChallengeTask[] // Populated
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export type SubmissionStatus = 'pending' | 'in_progress' | 'accepted' | 'needs_revision'
|
||||
|
||||
export interface ChallengeSubmission {
|
||||
_id: string
|
||||
id: string
|
||||
user: ChallengeUser | string
|
||||
task: ChallengeTask | string
|
||||
result: string
|
||||
status: SubmissionStatus
|
||||
queueId?: string
|
||||
feedback?: string
|
||||
submittedAt: string
|
||||
checkedAt?: string
|
||||
attemptNumber: number
|
||||
}
|
||||
|
||||
export type QueueStatusType = 'waiting' | 'in_progress' | 'completed' | 'error' | 'not_found'
|
||||
|
||||
export interface QueueStatus {
|
||||
status: QueueStatusType
|
||||
submission?: ChallengeSubmission & { task: ChallengeTask }
|
||||
error?: string
|
||||
position?: number
|
||||
}
|
||||
|
||||
export interface TaskStats {
|
||||
taskId: string
|
||||
taskTitle: string
|
||||
attempts: Array<{
|
||||
attemptNumber: number
|
||||
status: SubmissionStatus
|
||||
submittedAt: string
|
||||
checkedAt?: string
|
||||
feedback?: string
|
||||
}>
|
||||
totalAttempts: number
|
||||
status: 'not_attempted' | 'pending' | 'in_progress' | 'completed' | 'needs_revision'
|
||||
lastAttemptAt: string | null
|
||||
}
|
||||
|
||||
export interface ChainStats {
|
||||
chainId: string
|
||||
chainName: string
|
||||
totalTasks: number
|
||||
completedTasks: number
|
||||
progress: number // 0-100
|
||||
}
|
||||
|
||||
export interface UserStats {
|
||||
totalTasksAttempted: number
|
||||
completedTasks: number
|
||||
inProgressTasks: number
|
||||
needsRevisionTasks: number
|
||||
totalSubmissions: number
|
||||
averageCheckTimeMs: number
|
||||
taskStats: TaskStats[]
|
||||
chainStats: ChainStats[]
|
||||
}
|
||||
|
||||
export interface SystemStats {
|
||||
users: number
|
||||
tasks: number
|
||||
chains: number
|
||||
submissions: {
|
||||
total: number
|
||||
accepted: number
|
||||
rejected: number
|
||||
pending: number
|
||||
inProgress: number
|
||||
}
|
||||
averageCheckTimeMs: number
|
||||
queue: {
|
||||
queueLength: number
|
||||
waiting: number
|
||||
inProgress: number
|
||||
maxConcurrency: number
|
||||
currentlyProcessing: number
|
||||
}
|
||||
}
|
||||
|
||||
// API Request/Response types
|
||||
export interface APIResponse<T> {
|
||||
error: any
|
||||
data: T
|
||||
}
|
||||
|
||||
export interface CreateTaskRequest {
|
||||
title: string
|
||||
description: string
|
||||
hiddenInstructions?: string
|
||||
}
|
||||
|
||||
export interface UpdateTaskRequest {
|
||||
title?: string
|
||||
description?: string
|
||||
hiddenInstructions?: string
|
||||
}
|
||||
|
||||
export interface CreateChainRequest {
|
||||
name: string
|
||||
tasks: string[] // Array of task IDs
|
||||
}
|
||||
|
||||
export interface UpdateChainRequest {
|
||||
name?: string
|
||||
tasks?: string[]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user