@@ -46,9 +46,9 @@ composer require kariricode/exception
4646
4747### Uso Básico
4848
49- #### Usando Exceções Pré-definidas no Seu Código
49+ #### Usando Exceções Pré-definidas em Seu Código
5050
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.
5252
5353``` php
5454<?php
@@ -73,12 +73,17 @@ final class UserController extends BaseController
7373 {
7474 $userId = (int)$request->getAttribute('userId');
7575
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+ }
8287 }
8388}
8489
@@ -87,21 +92,30 @@ namespace YourApp\Service;
8792
8893use YourApp\Repository\UserRepository;
8994use KaririCode\Contract\Log\Logger;
95+ use KaririCode\Exception\Database\DatabaseException;
9096
9197class UserService
9298{
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+ ) {
100103 }
101104
105+ /**
106+ * @throws DatabaseException
107+ */
102108 public function getUserData(int $userId): array
103109 {
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+ }
105119 }
106120}
107121
@@ -113,26 +127,29 @@ use KaririCode\Exception\Database\DatabaseException;
113127
114128class UserRepository
115129{
116- private EntityManager $entityManager;
117-
118- public function __construct(EntityManager $entityManager)
130+ public function __construct(private EntityManager $entityManager)
119131 {
120- $this->entityManager = $entityManager;
121132 }
122133
134+ /**
135+ * @throws DatabaseException
136+ */
123137 public function findUserById(int $userId): array
124138 {
125139 $sql = 'SELECT * FROM users WHERE id = ?';
126- $userData = $this->entityManager->query($sql, [$userId]);
140+ try {
141+ $userData = $this->entityManager->query($sql, [$userId]);
127142
128- if ($userData === false ) {
129- throw DatabaseException::queryError($sql , $this->entityManager->getLastError() );
130- }
143+ if (empty( $userData) ) {
144+ throw DatabaseException::recordNotFound('User' , $userId );
145+ }
131146
132- return $userData;
147+ return $userData;
148+ } catch (\Exception $e) {
149+ throw DatabaseException::queryError($sql, $e->getMessage());
150+ }
133151 }
134152}
135-
136153```
137154
138155### Uso Avançado
@@ -147,19 +164,18 @@ declare(strict_types=1);
147164namespace YourApp\Exception;
148165
149166use KaririCode\Exception\AbstractException;
150- use KaririCode\Exception\ExceptionMessage;
151167
152168final class OrderException extends AbstractException
153169{
154170 private const CODE_ORDER_LIMIT_EXCEEDED = 4001;
155171
156172 public static function orderLimitExceeded(float $totalAmount, float $userOrderLimit): self
157173 {
158- return new self(new ExceptionMessage (
174+ return self::createException (
159175 self::CODE_ORDER_LIMIT_EXCEEDED,
160176 '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+ );
163179 }
164180}
165181```
@@ -192,20 +208,27 @@ final class OrderService
192208 */
193209 public function placeOrder(int $userId, array $items, float $totalAmount): void
194210 {
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+ }
209232 }
210233}
211234```
0 commit comments