6.3 KiB
6.3 KiB
REST API
Этот документ описывает внешний REST-контракт SparkGuardBackend.
Общие правила
- авторизация:
Authorization: Bearer <jwt>; - frontend работает только с backend, не с analyzer и не с MinIO;
uploadиcheck— разные действия;- full report скачивается только через backend.
Формат ошибки:
{
"message": "Краткое описание",
"error": "Технические детали"
}
Основной сценарий
POST /auth/loginGET /auth/meGET /readyzPOST /studentsPOST /groupsPOST /groups/:id/students/:student_idPOST /eventsPOST /worksPUT /works/:id/archivePOST /works/:id/checkGET /analysis-runs/:id- дождаться
Queued -> CompletedилиFailed GET /works/:id/summaryGET /events/:id/summaryGET /analysis-runs/:id/report.jsonGET /analysis-runs/:id/report.htmlGET /analysis-runs/:id/report.pdfGET /audit-logs— только для admin UI
Works
GET /worksPOST /worksGET /works/:idPUT /works/:idDELETE /works/:idPUT /works/:id/archivePOST /works/:id/checkGET /works/:id/archiveGET /works/:id/analysis-runsGET /works/:id/summaryGET /works/:id/adoptionsGET /works/:id/adoptions/relatedGET /works/:id/adoptions/archive
PUT /works/:id/archive
Смысл:
- repack архива;
- сохранение текущего архива в MinIO;
- обновление archive metadata у
work; - без создания
analysis_run. - принимает и raw
application/octet-stream, иmultipart/form-data.
Пример ответа:
{
"message": "archive uploaded",
"status": "Stored",
"archive_object_key": "submissions/12/101.zip",
"archive_checksum": "sha256...",
"archive_size": 20480
}
POST /works/:id/check
Смысл:
- создать новый
analysis_runпо текущему архиву; - записать outbox message;
- отправить задачу в Kafka.
Пример ответа:
{
"message": "analysis queued for current archive",
"analysis_run_id": "uuid",
"status": "Queued"
}
Analysis runs
GET /analysis-runs/:idGET /analysis-runs/:id/chunksGET /analysis-runs/:id/adoptionsGET /analysis-runs/:id/report.raw.jsonGET /analysis-runs/:id/report.jsonGET /analysis-runs/:id/report.htmlGET /analysis-runs/:id/report.pdfPOST /analysis-runs/:id/retry
Что важно понимать
POST /works/:id/check— единственная обычная команда запуска новой проверки;GET /works/:id/analysis-runs— история попыток по работе;GET /analysis-runs/:id— статус конкретной попытки;GET /analysis-runs/:id/adoptions— материализованные suspicious findings конкретного run;GET /analysis-runs/:id/report.json/html/pdf— teacher-facing отчёт для UI;GET /analysis-runs/:id/chunksиGET /analysis-runs/:id/report.raw.json— debug/admin endpoints, не обязательны frontend dashboards;POST /analysis-runs/:id/retry— человекочитаемая обычная ручка retry;
Dashboard summaries
GET /works/:id/summaryGET /events/:id/summaryGET /students/:id/statsGET /groups/:id/stats
Они отдают:
presentation_summary— агрегаты для frontend dashboards;trust_scoreиplagiarism_rate;- список работ/контрагентов с highest risk;
graph.nodes/graph.edgesдля сценария "кто с кем совпадает".
System
GET /healthzGET /readyz
healthz — дешёвая liveness probe.
readyz — readiness check backend API, который проверяет доступность базы данных.
Audit
GET /audit-logs
Доступно только Admin.
Фильтры:
actor_user_idactionresource_typeresource_idsourcelimit
Аудит покрывает:
- административные CRUD-операции;
- group memberships;
- upload/check/retry по работам;
- reference set changes;
- reference ingestion scheduling;
- system completion events для reference ingestion.
Teacher report
Teacher report содержит:
context:- работа;
- студент;
- группа;
- событие;
- archive metadata;
summary:- plagiarism probability;
- risk level;
- strongest counterpart;
- strongest match;
counterparts;evidence;technical.
Retry
POST /analysis-runs/:id/retry:
- не требует повторного upload;
- использует snapshot archive metadata исходного run;
- создаёт новый
analysis_run.
Adoptions
GET /adoptions/:id/segment
Этот endpoint сначала читает snapshot excerpt из БД. Если excerpt ещё не materialized, только тогда он обращается к архиву.
Reference sets
GET /reference-setsPOST /reference-setsGET /reference-sets/:idPATCH /reference-sets/:idDELETE /reference-sets/:idGET /reference-sets/:id/ingestionsPOST /reference-sets/:id/ingestions
Пример создания:
{
"name": "course-template",
"description": "Шаблон лабораторной работы",
"kind": "template"
}
Пример ingestion ответа:
{
"message": "accepted",
"ingestion_id": "uuid",
"status": "Queued",
"object_key": "reference-sets/7/uuid-template.zip"
}
Что смотреть при отладке
GET /analysis-runs/:id— статусы и error message;GET /analysis-runs/:id/chunks— Kafka compatibility flow;GET /analysis-runs/:id/report.raw.json— исходный analyzer output;GET /works/:id/summary— агрегированный work-level view поверх bilateral adoptions;GET /works/:id/adoptions/related— новые двусторонние связи по уже проверенным работам.