diff --git a/README.md b/README.md index 4a18e94..d3c0007 100644 --- a/README.md +++ b/README.md @@ -19,15 +19,17 @@ docker compose up * `/admin/grafana` - графана * `/docs` - обучающие материалы по анализу данных -После запуска по методу выше создается пользователь в админке (`/admin/`) с данными ниже:`admin` -- `admin` - логин -- `proooooood` - пароль +После запуска по методу выше создается пользователь в админке (`/admin/`) с данными ниже: +* `admin` - логин +* `proooooood` - пароль ## Тесты -Написаны unit-тесты (на базе Django TestCase) и E2E (Postman коллекция) +Написаны unit-тесты (на базе Django TestCase) и E2E (Postman коллекция). Они покрывают flow регистрации, просмотра и участия в соревновании. ![Postman data](img/postman.gif) -![django test]() +Ниже можно увидеть Coverage тестами бекенда данного приложения + +![django test](img/superduperdjangotests.png) diff --git a/img/superduperdjangotests.png b/img/superduperdjangotests.png new file mode 100644 index 0000000..d329283 Binary files /dev/null and b/img/superduperdjangotests.png differ diff --git a/services/backend/apps/core/management/commands/generate_pretty_data.py b/services/backend/apps/core/management/commands/generate_pretty_data.py index f4ea245..1de2cb5 100644 --- a/services/backend/apps/core/management/commands/generate_pretty_data.py +++ b/services/backend/apps/core/management/commands/generate_pretty_data.py @@ -520,8 +520,8 @@ users = [ "role": UserRole.STUDENT.value, }, { - "email": "oleg-tinkov@gmail.com", - "username": "oleg-tinkov", + "email": "s.bliznyuk@tbank.ru", + "username": "s_bliznyuk", "password": "password123!", "role": UserRole.STUDENT.value, }, @@ -697,16 +697,13 @@ class Command(BaseCommand): points=task["points"], submission_reviewers_count=task[ "submission_reviewers_count" - ], + ] if task["type"] == CompetitionTask.CompetitionTaskType.REVIEW.value else None, + correct_answer_file=task["correct_answer_file"] if task["type"] != CompetitionTask.CompetitionTaskType.REVIEW.value else None, max_attempts=task.get("max_attempts"), ) competitions[i]["tasks"][j]["obj"] = task_obj - if ( - task["type"] - == CompetitionTask.CompetitionTaskType.INPUT.value - ): - task_obj.correct_answer_file = task["correct_answer_file"] + if task.get("attachment"): CompetitionTaskAttachment.objects.create( task=task_obj, diff --git a/services/frontend/src/pages/CompetitionSession/modules/TaskSolution/components/CodeSolution/index.tsx b/services/frontend/src/pages/CompetitionSession/modules/TaskSolution/components/CodeSolution/index.tsx index 11cc8a7..0b386d2 100644 --- a/services/frontend/src/pages/CompetitionSession/modules/TaskSolution/components/CodeSolution/index.tsx +++ b/services/frontend/src/pages/CompetitionSession/modules/TaskSolution/components/CodeSolution/index.tsx @@ -1,6 +1,13 @@ import React, { useRef, useEffect, useState } from 'react'; import * as monaco from 'monaco-editor'; -import { Copy, Check } from 'lucide-react'; +import { Copy, Check, Info } from 'lucide-react'; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; interface CodeSolutionProps { answer: string; @@ -92,16 +99,103 @@ const CodeSolution: React.FC = ({
{languageDisplay}
- +
+ + + + + + + Информация о среде выполнения + + +
+
+

Ограничения

+
    +
  • +
    +
    +
    + Максимум 1 посылка в 10 секунд +
  • +
  • +
    +
    +
    + Максимальный размер решения 4MB +
  • +
  • +
    +
    +
    + Максимальное время работы программы 1 минута +
  • +
  • +
    +
    +
    + Выделяется 512MB на решение +
  • +
+
+ +
+

Доступные библиотеки

+
+
+
+ pandas + 2.2.3 +
+
+ numpy + 2.2.3 +
+
+ matplotlib + 3.10.1 +
+
+ scipy + 1.15.2 +
+
+ scikit-learn + 1.6.1 +
+
+ seaborn + 0.13.2 +
+
+ statsmodels + 0.14.4 +
+
+
+
+
+
+
+ + +