Add fetchAndStoreLogPage helper for v2 pagination

This commit is contained in:
Keith Solomon
2026-08-03 13:19:38 -05:00
parent 07a8bba1d5
commit 9a4a7291cc
+37
View File
@@ -249,3 +249,40 @@ function getSign($number) {
return '$';
}
/**
* Fetch a single page of log entries from the Torn v2 API and store them.
*
* Performs one HTTP request, validates the response, inserts each vault
* log entry (idempotently via INSERT ... ON CONFLICT), and returns the
* pagination cursor (`_metadata.links.next`) if more pages remain.
*
* @param PDO $pdo Database connection used to insert vault entries.
* @param string $user The user whose log entries are being fetched.
* @param string $url Full URL for the v2 API request.
*
* @throws ApiKeyMissingException If no API key is configured for the user.
* @throws CurlErrorException If the HTTP request fails.
* @throws JsonDataException If the response body is not valid JSON.
* @throws ApiValidationException If the response is missing the `log` array.
*
* @return string|null The `_metadata.links.next` URL, or null when there are no more pages.
*/
function fetchAndStoreLogPage($pdo, $user, $url) {
if (!array_key_exists($user, USER_KEYS)) {
throw new ApiKeyMissingException("User does not have an API key configured.");
}
$responseData = executeApiCall($url, USER_KEYS[$user]);
validateApiResponse($responseData);
$insertStmt = $pdo->prepare(
'INSERT INTO vault (id, user, timestamp, description, amount) '
. 'VALUES (:id, :user, :timestamp, :description, :amount) '
. 'ON CONFLICT(id) DO NOTHING'
);
processLogEntries($responseData['log'], $user, $insertStmt);
return $responseData['_metadata']['links']['next'] ?? null;
}