mirror of
https://github.com/anikeen-com/id.git
synced 2026-11-04 22:59:41 +00:00
Throw ApiException for requests with the user's token too
Requests with the user's token threw a bare ResourceException with a message like "… for resource [Anikeen\Id\Resources\Order]" and no error code, while app requests threw ApiException. Both throw ApiException now: status (also getCode()), Anikeen ID's error code and message, isNotFound(), isConflict(), isTemporary(). Failed lists throw CollectionException, now a subclass of ApiException. A request without a response (connection refused, timeout) throws ApiException with status 0 instead of a Guzzle exception. ApiException extends ResourceException, so existing catch blocks keep working. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a4345e72ec
commit
57ce0b4a79
8 files changed
+196
-33
No files matched your search
@@ -7,6 +7,7 @@ use Anikeen\Id\Exceptions\CollectionException;
|
||||
use Anikeen\Id\Helpers\Paginator;
|
||||
use Anikeen\Id\Result;
|
||||
use Closure;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use JsonSerializable;
|
||||
use Throwable;
|
||||
@@ -34,10 +35,15 @@ abstract class BaseCollection implements JsonSerializable
|
||||
*/
|
||||
protected function __construct(callable $callable)
|
||||
{
|
||||
$this->result = $callable();
|
||||
try {
|
||||
$this->result = $callable();
|
||||
} catch (GuzzleException $e) {
|
||||
// no response at all (connection refused, timeout)
|
||||
throw CollectionException::unreachable($e);
|
||||
}
|
||||
|
||||
if (!$this->result->success()) {
|
||||
throw new CollectionException(sprintf('%s for collection [%s]', rtrim($this->result->data->message, '.'), get_called_class()), $this->result->response->getStatusCode());
|
||||
throw CollectionException::fromResult($this->result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user