fixed session numbering
Some checks failed
PHPUnit / test (push) Has been cancelled

This commit is contained in:
2026-07-01 08:44:29 +02:00
parent 9db886a1ae
commit e589b46a8a
4 changed files with 92 additions and 28 deletions

View File

@ -109,6 +109,48 @@ function qdb_get_program_session(PDO $pdo, string $sessionID): ?array {
return $row;
}
/**
* sessionNumber (1-based visit index) and orderIndex (0-based sort key) stay in sync:
* orderIndex = sessionNumber - 1.
*
* @param array<string, mixed> $body
* @param array<string, mixed>|null $existing
* @return array{sessionNumber: int, orderIndex: int}
*/
function qdb_program_session_resolve_order(PDO $pdo, array $body, ?array $existing = null): array
{
if (isset($body['sessionNumber'])) {
$sessionNumber = max(1, (int)$body['sessionNumber']);
return [
'sessionNumber' => $sessionNumber,
'orderIndex' => $sessionNumber - 1,
];
}
if (isset($body['orderIndex'])) {
$orderIndex = max(0, (int)$body['orderIndex']);
return [
'sessionNumber' => $orderIndex + 1,
'orderIndex' => $orderIndex,
];
}
if ($existing !== null) {
$sessionNumber = max(1, (int)$existing['sessionNumber']);
return [
'sessionNumber' => $sessionNumber,
'orderIndex' => $sessionNumber - 1,
];
}
$maxNum = (int)$pdo->query('SELECT COALESCE(MAX(sessionNumber), 0) FROM program_session')->fetchColumn();
$maxOrd = (int)$pdo->query('SELECT COALESCE(MAX(orderIndex), -1) FROM program_session')->fetchColumn();
$sessionNumber = max($maxNum, $maxOrd + 1, 0) + 1;
return [
'sessionNumber' => $sessionNumber,
'orderIndex' => $sessionNumber - 1,
];
}
/**
* @return list<array{questionnaireID: string, orderIndex: int}>
*/