feat(exam): S4-11 marking flow, results table, CSV, ResultsWidget
app-ci-deploy / test-build-deploy (push) Has been cancelled
app-ci-deploy / test-build-deploy (push) Has been cancelled
- /exam-marker/:batchId/mark — ExamMarkingPage: student queue, per-part mark entry, upsert marks - /exam-marker/:batchId/results — ExamResultsPage: results table with absent rows, CSV download - ResultsWidget on ClassDetailPage: last batch summary, class average, absent count, batch creation - New types: MarkingBatch, StudentSubmission, BatchQueueResponse, BatchResultsResponse, MarkUpsertPayload - New repo methods: createBatch, listBatches, getBatchQueue, getBatchResults, getBatchCsv, upsertMark Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ab35193be1
commit
3389fdcb5b
@@ -201,3 +201,68 @@ export interface Neo4jSyncResult {
|
||||
status: string;
|
||||
projection?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface MarkingBatch {
|
||||
id: string;
|
||||
template_id: string;
|
||||
class_id: string | null;
|
||||
institute_id: string;
|
||||
teacher_id: string;
|
||||
title: string | null;
|
||||
status: 'open' | 'closed' | 'archived' | string;
|
||||
created_at: string;
|
||||
updated_at?: string;
|
||||
submission_count?: number;
|
||||
}
|
||||
|
||||
export interface StudentSubmission {
|
||||
id: string;
|
||||
batch_id: string;
|
||||
student_id: string | null;
|
||||
student_name: string | null;
|
||||
status: 'absent' | 'unmatched' | 'matched' | 'marking' | 'complete' | string;
|
||||
storage_path?: string | null;
|
||||
mark_entry_count?: number;
|
||||
}
|
||||
|
||||
export interface BatchQueueResponse {
|
||||
batch: MarkingBatch;
|
||||
submissions: StudentSubmission[];
|
||||
progress: {
|
||||
total: number;
|
||||
absent: number;
|
||||
complete: number;
|
||||
in_progress: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ExamResultRow {
|
||||
submission_id: string;
|
||||
student_id: string | null;
|
||||
student_name: string | null;
|
||||
status: string | null;
|
||||
marks: Record<string, number | null | undefined>;
|
||||
total: number | null;
|
||||
}
|
||||
|
||||
export interface BatchResultsResponse {
|
||||
batch: MarkingBatch;
|
||||
questions: Array<Pick<ExamQuestion, 'id' | 'label' | 'max_marks' | 'order'>>;
|
||||
results: ExamResultRow[];
|
||||
}
|
||||
|
||||
export interface CreateBatchPayload {
|
||||
template_id: string;
|
||||
class_id?: string;
|
||||
title?: string;
|
||||
}
|
||||
|
||||
export interface MarkUpsertPayload {
|
||||
submission_id: string;
|
||||
question_id: string;
|
||||
awarded_marks: number;
|
||||
mark_scheme_detail?: Record<string, unknown>;
|
||||
annotation_shape_ids?: unknown;
|
||||
comment?: string;
|
||||
confirmed?: boolean;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user