@@ -46,9 +46,9 @@ composer require kariricode/exception
46
46
47
47
### Uso Básico
48
48
49
- #### Usando Exceções Pré-definidas no Seu Código
49
+ #### Usando Exceções Pré-definidas em Seu Código
50
50
51
- O componente KaririCode Exception oferece uma variedade de exceções pré-definidas que você pode usar para lidar com cenários comuns de erro de maneira profissional e estruturada. Abaixo está um exemplo de como usar essas exceções em um contexto orientado a objetos.
51
+ O componente de Exceção do KaririCode fornece uma variedade de exceções pré-definidas que você pode usar para lidar com cenários de erro comuns de maneira profissional e estruturada. Abaixo está um exemplo de como usar essas exceções em um contexto orientado a objetos.
52
52
53
53
``` php
54
54
<?php
@@ -73,12 +73,17 @@ final class UserController extends BaseController
73
73
{
74
74
$userId = (int)$request->getAttribute('userId');
75
75
76
- $userData = $this->userService->getUserData($userId);
77
- return $this->responseBuilder($response)
78
- ->setData($userData)
79
- ->setHeader('Content-Type', 'application/json')
80
- ->setStatus(200)
81
- ->build();
76
+ try {
77
+ $userData = $this->userService->getUserData($userId);
78
+ return $this->responseBuilder($response)
79
+ ->setData($userData)
80
+ ->setHeader('Content-Type', 'application/json')
81
+ ->setStatus(200)
82
+ ->build();
83
+ } catch (\Exception $e) {
84
+ // Handle exceptions and return appropriate error response
85
+ return $this->errorResponse($response, $e);
86
+ }
82
87
}
83
88
}
84
89
@@ -87,21 +92,30 @@ namespace YourApp\Service;
87
92
88
93
use YourApp\Repository\UserRepository;
89
94
use KaririCode\Contract\Log\Logger;
95
+ use KaririCode\Exception\Database\DatabaseException;
90
96
91
97
class UserService
92
98
{
93
- private UserRepository $userRepository;
94
- private Logger $logger;
95
-
96
- public function __construct(UserRepository $userRepository, Logger $logger)
97
- {
98
- $this->userRepository = $userRepository;
99
- $this->logger = $logger;
99
+ public function __construct(
100
+ private UserRepository $userRepository,
101
+ private Logger $logger
102
+ ) {
100
103
}
101
104
105
+ /**
106
+ * @throws DatabaseException
107
+ */
102
108
public function getUserData(int $userId): array
103
109
{
104
- return $this->userRepository->findUserById($userId);
110
+ try {
111
+ return $this->userRepository->findUserById($userId);
112
+ } catch (DatabaseException $e) {
113
+ $this->logger->error('Failed to retrieve user data', [
114
+ 'userId' => $userId,
115
+ 'error' => $e->getMessage(),
116
+ ]);
117
+ throw $e;
118
+ }
105
119
}
106
120
}
107
121
@@ -113,26 +127,29 @@ use KaririCode\Exception\Database\DatabaseException;
113
127
114
128
class UserRepository
115
129
{
116
- private EntityManager $entityManager;
117
-
118
- public function __construct(EntityManager $entityManager)
130
+ public function __construct(private EntityManager $entityManager)
119
131
{
120
- $this->entityManager = $entityManager;
121
132
}
122
133
134
+ /**
135
+ * @throws DatabaseException
136
+ */
123
137
public function findUserById(int $userId): array
124
138
{
125
139
$sql = 'SELECT * FROM users WHERE id = ?';
126
- $userData = $this->entityManager->query($sql, [$userId]);
140
+ try {
141
+ $userData = $this->entityManager->query($sql, [$userId]);
127
142
128
- if ($userData === false ) {
129
- throw DatabaseException::queryError($sql , $this->entityManager->getLastError() );
130
- }
143
+ if (empty( $userData) ) {
144
+ throw DatabaseException::recordNotFound('User' , $userId );
145
+ }
131
146
132
- return $userData;
147
+ return $userData;
148
+ } catch (\Exception $e) {
149
+ throw DatabaseException::queryError($sql, $e->getMessage());
150
+ }
133
151
}
134
152
}
135
-
136
153
```
137
154
138
155
### Uso Avançado
@@ -147,19 +164,18 @@ declare(strict_types=1);
147
164
namespace YourApp\Exception;
148
165
149
166
use KaririCode\Exception\AbstractException;
150
- use KaririCode\Exception\ExceptionMessage;
151
167
152
168
final class OrderException extends AbstractException
153
169
{
154
170
private const CODE_ORDER_LIMIT_EXCEEDED = 4001;
155
171
156
172
public static function orderLimitExceeded(float $totalAmount, float $userOrderLimit): self
157
173
{
158
- return new self(new ExceptionMessage (
174
+ return self::createException (
159
175
self::CODE_ORDER_LIMIT_EXCEEDED,
160
176
'ORDER_LIMIT_EXCEEDED',
161
- "Valor do pedido (${totalAmount}) excede o limite do usuário (${userOrderLimit})"
162
- )) ;
177
+ "Order amount (${totalAmount}) exceeds user limit (${userOrderLimit})"
178
+ );
163
179
}
164
180
}
165
181
```
@@ -192,20 +208,27 @@ final class OrderService
192
208
*/
193
209
public function placeOrder(int $userId, array $items, float $totalAmount): void
194
210
{
195
- $userOrderLimit = $this->orderRepository->getUserOrderLimit($userId);
196
-
197
- if ($totalAmount > $userOrderLimit) {
198
- $this->logger->warning('Pedido excede o limite do usuário', [
199
- 'userId' => $userId,
200
- 'orderAmount' => $totalAmount,
201
- 'userLimit' => $userOrderLimit,
202
- ]);
203
-
204
- throw OrderException::orderLimitExceeded($totalAmount, $userOrderLimit);
205
- }
206
-
207
- $this->orderRepository->createOrder($userId, $items, $totalAmount);
208
-
211
+ try {
212
+ $userOrderLimit = $this->orderRepository->getUserOrderLimit($userId);
213
+
214
+ if ($totalAmount > $userOrderLimit) {
215
+ $this->logger->warning('Order exceeds user limit', [
216
+ 'userId' => $userId,
217
+ 'orderAmount' => $totalAmount,
218
+ 'userLimit' => $userOrderLimit,
219
+ ]);
220
+
221
+ throw OrderException::orderLimitExceeded($totalAmount, $userOrderLimit);
222
+ }
223
+
224
+ $this->orderRepository->createOrder($userId, $items, $totalAmount);
225
+ } catch (DatabaseException $e) {
226
+ $this->logger->error('Database error while placing order', [
227
+ 'userId' => $userId,
228
+ 'error' => $e->getMessage(),
229
+ ]);
230
+ throw $e;
231
+ }
209
232
}
210
233
}
211
234
```
0 commit comments