/
servgri
/
interview
Обзор
Документация
Войти
/
servgri
/
interview
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
bot_api/views.py
66 строк
2 KB
Seal
full project
27 ноя 2025, 14:24
27 ноя 2025, 14:24
d1507ba
Код
Авторство
О чём код?
from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response from users.models import User from rest_framework_simplejwt.tokens import AccessToken from .permissions import TelegramUserPermission from .serializers import TaskSerializer from .test_runner import run_task_tests from tasks.models import Task, UserProgress @api_view(["POST"]) def telegram_token(request): """ Выдаёт JWT по telegram_id. """ telegram_id = request.data.get("telegram_id") username = request.data.get("username") try: user, created = User.objects.get_or_create(telegram_id=telegram_id, username=username) except User.DoesNotExist: return Response({"error": "User not found"}, status=404) token = AccessToken.for_user(user) return Response({"access": str(token)}) @api_view(["GET"]) @permission_classes([TelegramUserPermission]) def get_task(request, task_id): try: task = Task.objects.get(pk=task_id) except Task.DoesNotExist: return Response({"error": "Task not found"}, status=404) return Response(TaskSerializer(task).data) @api_view(["POST"]) @permission_classes([TelegramUserPermission]) def submit_task(request, task_id): """ Принимает code → прогоняет тесты → сохраняет прогресс → отдаёт результаты. """ user = request.user code = request.data.get("user_solution", "") try: task = Task.objects.get(pk=task_id) except Task.DoesNotExist: return Response({"error": "Task not found"}, status=404) passed, feedback = run_task_tests(task_id, code) progress, _ = UserProgress.objects.get_or_create(user=user, task=task) progress.correct = passed progress.user_answer = code progress.attempt_count += 1 progress.save() return Response({ "success": passed, "feedback": feedback })