init + api use

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-11-03 17:59:08 +03:00
commit e777b57991
52 changed files with 20725 additions and 0 deletions

141
src/types/challenge.ts Normal file
View 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[]
}