This commit is contained in:
@ -19,9 +19,14 @@ case 'GET':
|
||||
json_success($detail);
|
||||
}
|
||||
|
||||
[$clause, $params] = rbac_client_filter($tokenRec, 'cl');
|
||||
$archiveFilter = trim((string)($_GET['archiveFilter'] ?? 'active'));
|
||||
if (!in_array($archiveFilter, ['active', 'archived', 'all'], true)) {
|
||||
$archiveFilter = 'active';
|
||||
}
|
||||
[$clause, $params] = rbac_client_filter($tokenRec, 'cl', $archiveFilter);
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT cl.clientCode, cl.coachID, co.username AS coachUsername,
|
||||
"SELECT cl.clientCode, cl.coachID, cl.archived, cl.archivedAt,
|
||||
co.username AS coachUsername,
|
||||
CASE WHEN EXISTS (
|
||||
SELECT 1 FROM completed_questionnaire cq WHERE cq.clientCode = cl.clientCode
|
||||
) OR EXISTS (
|
||||
@ -30,7 +35,7 @@ case 'GET':
|
||||
FROM client cl
|
||||
LEFT JOIN coach co ON co.coachID = cl.coachID
|
||||
WHERE $clause
|
||||
ORDER BY hasResponseData DESC, cl.clientCode ASC"
|
||||
ORDER BY cl.archived ASC, hasResponseData DESC, cl.clientCode ASC"
|
||||
);
|
||||
foreach ($params as $k => $v) $stmt->bindValue($k, $v);
|
||||
$stmt->execute();
|
||||
@ -88,8 +93,9 @@ case 'POST':
|
||||
json_error('DUPLICATE', 'Client code already exists', 409);
|
||||
}
|
||||
|
||||
$pdo->prepare("INSERT INTO client (clientCode, coachID) VALUES (:cc, :cid)")
|
||||
->execute([':cc' => $clientCode, ':cid' => $coachID]);
|
||||
$pdo->prepare(
|
||||
"INSERT INTO client (clientCode, coachID, archived, archivedAt) VALUES (:cc, :cid, 0, 0)"
|
||||
)->execute([':cc' => $clientCode, ':cid' => $coachID]);
|
||||
|
||||
qdb_save($tmpDb, $lockFp);
|
||||
json_success(['clientCode' => $clientCode, 'coachID' => $coachID]);
|
||||
@ -153,6 +159,44 @@ case 'PUT':
|
||||
}
|
||||
break;
|
||||
|
||||
case 'PATCH':
|
||||
$body = read_json_body();
|
||||
$clientCode = trim((string)($body['clientCode'] ?? ''));
|
||||
if ($clientCode === '' || !array_key_exists('archived', $body)) {
|
||||
json_error('MISSING_FIELDS', 'clientCode and archived are required', 400);
|
||||
}
|
||||
$archived = !empty($body['archived']) ? 1 : 0;
|
||||
|
||||
try {
|
||||
[$pdo, $tmpDb, $lockFp] = qdb_open_write_or_fail();
|
||||
|
||||
[$clause, $params] = rbac_client_filter($tokenRec, 'cl', 'all');
|
||||
$chk = $pdo->prepare(
|
||||
"SELECT clientCode, archived FROM client cl WHERE cl.clientCode = :cc AND ($clause)"
|
||||
);
|
||||
$chk->execute(array_merge([':cc' => $clientCode], $params));
|
||||
$row = $chk->fetch(PDO::FETCH_ASSOC);
|
||||
if (!$row) {
|
||||
qdb_discard($tmpDb, $lockFp);
|
||||
json_error('NOT_FOUND', 'Client not found or not authorized', 404);
|
||||
}
|
||||
|
||||
$archivedAt = $archived ? time() : 0;
|
||||
$pdo->prepare(
|
||||
'UPDATE client SET archived = :a, archivedAt = :at WHERE clientCode = :cc'
|
||||
)->execute([':a' => $archived, ':at' => $archivedAt, ':cc' => $clientCode]);
|
||||
|
||||
qdb_save($tmpDb, $lockFp);
|
||||
json_success([
|
||||
'clientCode' => $clientCode,
|
||||
'archived' => $archived,
|
||||
'archivedAt' => $archivedAt,
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
qdb_handler_fail($e, 'clients', $pdo ?? null, $tmpDb ?? null, $lockFp ?? null);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'DELETE':
|
||||
$body = read_json_body();
|
||||
$clientCode = trim($body['clientCode'] ?? '');
|
||||
|
||||
Reference in New Issue
Block a user