added completion info to client api

This commit is contained in:
2026-05-16 16:27:13 +02:00
parent 72cfe274e1
commit 2a11dfd0d1
2 changed files with 59 additions and 6 deletions

View File

@ -176,8 +176,20 @@ Success:
"ok": true, "ok": true,
"data": { "data": {
"clients": [ "clients": [
"CLIENT-001", {
"CLIENT-002" "clientCode": "CLIENT-001",
"completedQuestionnaires": [
{
"questionnaireID": "questionnaire_1_demographic_information",
"sumPoints": 42,
"completedAt": 1714471800
}
]
},
{
"clientCode": "CLIENT-002",
"completedQuestionnaires": []
}
] ]
} }
} }
@ -185,7 +197,12 @@ Success:
Fields: Fields:
- `clients`: array of client code strings assigned to the coach, ordered alphabetically. - `clients`: array of client objects assigned to the coach, ordered alphabetically by `clientCode`.
- `clients[].clientCode`: the client's code string.
- `clients[].completedQuestionnaires`: array of questionnaires already completed by this client. Empty array if none.
- `clients[].completedQuestionnaires[].questionnaireID`: the questionnaire ID, matching the IDs from the questionnaire list endpoint.
- `clients[].completedQuestionnaires[].sumPoints`: total points from the last upload for this questionnaire.
- `clients[].completedQuestionnaires[].completedAt`: Unix timestamp (seconds) of when the questionnaire was completed, or `null` if not recorded.
Common failures: Common failures:
@ -411,7 +428,18 @@ data class SubmitQuestionnaireResponse(
) )
data class ClientsResponse( data class ClientsResponse(
val clients: List<String> val clients: List<ClientInfo>
)
data class ClientInfo(
val clientCode: String,
val completedQuestionnaires: List<CompletedQuestionnaire> = emptyList()
)
data class CompletedQuestionnaire(
val questionnaireID: String,
val sumPoints: Int,
val completedAt: Long?
) )
``` ```

View File

@ -175,7 +175,32 @@ if ($fetchClients) {
ORDER BY clientCode ORDER BY clientCode
"); ");
$stmt->execute([':cid' => $coachID]); $stmt->execute([':cid' => $coachID]);
$clients = $stmt->fetchAll(PDO::FETCH_COLUMN); $clientCodes = $stmt->fetchAll(PDO::FETCH_COLUMN);
$completions = [];
if (!empty($clientCodes)) {
$placeholders = implode(',', array_fill(0, count($clientCodes), '?'));
$stmt2 = $pdo->prepare("
SELECT clientCode, questionnaireID, sumPoints, completedAt
FROM completed_questionnaire
WHERE clientCode IN ($placeholders)
");
$stmt2->execute($clientCodes);
foreach ($stmt2->fetchAll(PDO::FETCH_ASSOC) as $row) {
$completions[$row['clientCode']][] = [
'questionnaireID' => $row['questionnaireID'],
'sumPoints' => (int) $row['sumPoints'],
'completedAt' => $row['completedAt'] !== null ? (int) $row['completedAt'] : null,
];
}
}
$clients = array_map(function ($code) use ($completions) {
return [
'clientCode' => $code,
'completedQuestionnaires' => $completions[$code] ?? [],
];
}, $clientCodes);
qdb_discard($tmpDb, $lockFp); qdb_discard($tmpDb, $lockFp);
json_success(['coachID' => $coachID, 'clients' => $clients]); json_success(['coachID' => $coachID, 'clients' => $clients]);