e87168d3a0
Made-with: Cursor
19 lines
783 B
JavaScript
19 lines
783 B
JavaScript
/**
|
|
* Логика «цепочки» теста: попытки и версии (см. docs/revision_task/card1.md V.2).
|
|
* @param {import('pg').Pool | { query: Function }} pool пул или объект с методом query(sql, params)
|
|
* @param {string} testId UUID теста (tests.id)
|
|
* @returns {Promise<boolean>} true, если по любой версии этой цепочки есть хотя бы одна попытка
|
|
*/
|
|
export async function hasAnyAttemptForTest(pool, testId) {
|
|
const { rows } = await pool.query(
|
|
`SELECT EXISTS (
|
|
SELECT 1
|
|
FROM test_attempts ta
|
|
INNER JOIN test_versions tv ON ta.test_version_id = tv.id
|
|
WHERE tv.test_id = $1
|
|
) AS has_any`,
|
|
[testId]
|
|
);
|
|
return rows[0].has_any === true;
|
|
}
|