bugfix
This commit is contained in:
@@ -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
|
||||
]
|
||||
|
||||
@@ -348,7 +348,6 @@ body.ui-legacy .list-row__side {
|
||||
align-items: center;
|
||||
padding: 0.5rem 0.9rem 0.5rem 0;
|
||||
flex-shrink: 0;
|
||||
border-left: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
|
||||
}
|
||||
|
||||
body.ui-legacy .list-row--hidden {
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class="list-row__side">
|
||||
<button type="button" class="btn btn-ghost btn-start-pass" data-test-id="{{ t.id }}">Продолжить</button>
|
||||
<button type="button" class="btn btn-ghost btn-start-pass" data-test-id="{{ t.id }}">
|
||||
{{ 'Продолжить' if t.has_in_progress_attempt else 'Пройти' }}
|
||||
</button>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
@@ -49,7 +51,9 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class="list-row__side">
|
||||
<button type="button" class="btn btn-ghost btn-start-pass" data-test-id="{{ t.id }}">Продолжить</button>
|
||||
<button type="button" class="btn btn-ghost btn-start-pass" data-test-id="{{ t.id }}">
|
||||
{{ 'Продолжить' if t.has_in_progress_attempt else 'Пройти' }}
|
||||
</button>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
@@ -199,7 +203,8 @@
|
||||
const testId = btn.dataset.testId;
|
||||
if (!testId) return;
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Продолжить…';
|
||||
const oldText = (btn.textContent || '').trim() || 'Пройти';
|
||||
btn.textContent = `${oldText}…`;
|
||||
try {
|
||||
const r = await fetch(`/api/tests/${testId}/attempts/start`, {
|
||||
method: 'POST',
|
||||
|
||||
Reference in New Issue
Block a user