PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 All 257 releases
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Resources / Credit / CreditsLedgerResource.php

CreditsLedgerResource.php in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at vendor/vendor-prefixed/stellarwp/licensing-api-client/src/Resources/Credit/CreditsLedgerResource.php

146 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Credit;
4
5 use Generator;
6 use JsonException;
7 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\Contracts\ApiErrorExceptionInterface;
8 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\MissingAuthenticationException;
9 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\UnexpectedResponseException;
10 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\AuthState;
11 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\Factories\ApiUriFactory;
12 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestExecutor;
13 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestHeaderCollection;
14 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Credit\ListLedgerEntries;
15 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsAuthState;
16 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsRequestHeaderCollection;
17 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\CreditsLedgerResourceInterface;
18 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Credit\LedgerPage;
19 use Give\Vendors\Psr\Http\Client\ClientExceptionInterface;
20
21 /**
22 * Provides operations for the credits ledger API resource.
23 *
24 * @phpstan-import-type ListLedgerEntriesQuery from ListLedgerEntries
25 * @phpstan-type LedgerEntryPayload array{
26 * id: int,
27 * pool_id: int,
28 * entitlement_id_at_event: int,
29 * tier_at_event: string,
30 * domain: string,
31 * product_slug: string,
32 * credit_type: string,
33 * entry_type: string,
34 * amount: int,
35 * period_start: string|null,
36 * idempotency_key: string,
37 * created_at: string
38 * }
39 * @phpstan-type LedgerPagePayload array{
40 * entries: list<LedgerEntryPayload>,
41 * links: array{
42 * first: string,
43 * last: string|null,
44 * prev: string|null,
45 * next: string|null
46 * },
47 * meta: array{
48 * page: array{
49 * total: int,
50 * limit: int,
51 * max_size: int
52 * }
53 * }
54 * }
55 */
56 final class CreditsLedgerResource implements CreditsLedgerResourceInterface
57 {
58 use RebindsAuthState;
59 use RebindsRequestHeaderCollection;
60
61 private RequestExecutor $requestExecutor;
62
63 private ApiUriFactory $apiUriFactory;
64
65 private AuthState $authState;
66
67 private RequestHeaderCollection $requestHeaderCollection;
68
69 public function __construct(
70 RequestExecutor $requestExecutor,
71 ApiUriFactory $apiUriFactory,
72 AuthState $authState,
73 RequestHeaderCollection $requestHeaderCollection
74 ) {
75 $this->requestExecutor = $requestExecutor;
76 $this->apiUriFactory = $apiUriFactory;
77 $this->authState = $authState;
78 $this->requestHeaderCollection = $requestHeaderCollection;
79 }
80
81 /**
82 * @throws ApiErrorExceptionInterface
83 * @throws MissingAuthenticationException
84 * @throws UnexpectedResponseException
85 * @throws ClientExceptionInterface
86 * @throws JsonException
87 */
88 public function list(ListLedgerEntries $request): LedgerPage {
89 /** @var ListLedgerEntriesQuery $query */
90 $query = $request->toQuery();
91
92 $result = $this->requestExecutor->executeJson(
93 'GET',
94 $this->apiUriFactory->make('/credits/ledger'),
95 $query,
96 null,
97 $this->authState->requiredToken(),
98 $this->requestHeaderCollection->all()
99 );
100
101 /** @var LedgerPagePayload $result */
102 return LedgerPage::from($result);
103 }
104
105 /**
106 * @throws ApiErrorExceptionInterface
107 * @throws MissingAuthenticationException
108 * @throws UnexpectedResponseException
109 * @throws ClientExceptionInterface
110 * @throws JsonException
111 *
112 * @return Generator<int, LedgerPage, mixed, void>
113 */
114 public function pages(ListLedgerEntries $request): Generator {
115 $page = $this->list($request);
116
117 while (true) {
118 yield $page;
119
120 if ($page->links->next === null) {
121 return;
122 }
123
124 $result = $this->requestExecutor->executeJson(
125 'GET',
126 $this->apiUriFactory->fromPaginationLink($page->links->next),
127 [],
128 null,
129 $this->authState->requiredToken(),
130 $this->requestHeaderCollection->all()
131 );
132
133 /** @var LedgerPagePayload $result */
134 $page = LedgerPage::from($result);
135 }
136 }
137
138 protected function rebindWithAuthState(AuthState $authState): self {
139 return new self($this->requestExecutor, $this->apiUriFactory, $authState, $this->requestHeaderCollection);
140 }
141
142 protected function rebindWithRequestHeaderCollection(RequestHeaderCollection $requestHeaderCollection): self {
143 return new self($this->requestExecutor, $this->apiUriFactory, $this->authState, $requestHeaderCollection);
144 }
145 }
146