|
|
|
|
@ -6,7 +6,7 @@ from dataclasses import dataclass
|
|
|
|
|
from sqlalchemy import exists, select |
|
|
|
|
|
|
|
|
|
from ..db import get_session |
|
|
|
|
from ..models import Test, TestAssignment, TestAssignmentTarget, TestVersion, User |
|
|
|
|
from ..models import Test, TestAssignment, TestAssignmentTarget, TestAttempt, TestVersion, User |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def is_test_author(created_by, user_id) -> bool: |
|
|
|
|
@ -57,7 +57,12 @@ def user_has_test_access(user_id: str, test_id: str) -> AccessResult:
|
|
|
|
|
|
|
|
|
|
def list_visible_tests(user_id: str) -> list[dict]: |
|
|
|
|
"""В dev-режиме возвращает все активные тесты независимо от назначения.""" |
|
|
|
|
import uuid as _uuid |
|
|
|
|
session = get_session() |
|
|
|
|
try: |
|
|
|
|
uid = _uuid.UUID(user_id) |
|
|
|
|
except (ValueError, AttributeError): |
|
|
|
|
uid = None |
|
|
|
|
|
|
|
|
|
rows = ( |
|
|
|
|
session.query(Test, TestVersion, User) |
|
|
|
|
@ -80,6 +85,16 @@ def list_visible_tests(user_id: str) -> list[dict]:
|
|
|
|
|
'version': tv.version, |
|
|
|
|
'created_by': str(t.created_by) if t.created_by else None, |
|
|
|
|
'author_full_name': u.full_name if u else '—', |
|
|
|
|
'has_in_progress_attempt': bool( |
|
|
|
|
uid and session.query( |
|
|
|
|
exists().where( |
|
|
|
|
TestAttempt.user_id == uid, |
|
|
|
|
TestAttempt.status == 'in_progress', |
|
|
|
|
TestAttempt.test_version_id == TestVersion.id, |
|
|
|
|
TestVersion.test_id == t.id, |
|
|
|
|
) |
|
|
|
|
).scalar() |
|
|
|
|
), |
|
|
|
|
} |
|
|
|
|
for t, tv, u in rows |
|
|
|
|
] |
|
|
|
|
|