|
|
@@ -3,9 +3,11 @@
|
|
|
namespace Controllers;
|
|
|
|
|
|
use Libs\ResponseLib;
|
|
|
+use Models\CprModel;
|
|
|
use Models\OrderbookModel;
|
|
|
use Models\OrderbookTransferModel;
|
|
|
use Models\PaymentModel;
|
|
|
+use Models\TokenModel;
|
|
|
use Models\WalletModel;
|
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
|
use Respect\Validation\Exceptions\ValidationException;
|
|
|
@@ -18,6 +20,8 @@ class OrderbookTransferController
|
|
|
private WalletModel $walletModel;
|
|
|
private OrderbookTransferModel $orderbookTransferModel;
|
|
|
private TokenTransferService $tokenTransferService;
|
|
|
+ private TokenModel $tokenModel;
|
|
|
+ private CprModel $cprModel;
|
|
|
|
|
|
public function __construct()
|
|
|
{
|
|
|
@@ -25,6 +29,8 @@ class OrderbookTransferController
|
|
|
$this->walletModel = new WalletModel();
|
|
|
$this->orderbookTransferModel = new OrderbookTransferModel();
|
|
|
$this->tokenTransferService = new TokenTransferService();
|
|
|
+ $this->tokenModel = new TokenModel();
|
|
|
+ $this->cprModel = new CprModel();
|
|
|
}
|
|
|
|
|
|
public function __invoke(ServerRequestInterface $request)
|
|
|
@@ -71,6 +77,26 @@ class OrderbookTransferController
|
|
|
return ResponseLib::sendFail('Orderbook não encontrado', ['token_external_id' => $tokenExternalId], 'E_NOT_FOUND')->withStatus(404);
|
|
|
}
|
|
|
|
|
|
+ $tokenId = (int)($orderbook['token_id'] ?? 0);
|
|
|
+ if ($tokenId <= 0) {
|
|
|
+ return ResponseLib::sendFail('Orderbook sem token associado', [], 'E_ORDERBOOK_TOKEN')->withStatus(409);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $token = $this->tokenModel->findById($tokenId);
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ return ResponseLib::sendFail('Falha ao carregar token vinculado: ' . $e->getMessage(), [], 'E_DATABASE')->withStatus(500);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$token) {
|
|
|
+ return ResponseLib::sendFail('Token associado ao orderbook não encontrado', ['token_id' => $tokenId], 'E_TOKEN_NOT_FOUND')->withStatus(404);
|
|
|
+ }
|
|
|
+
|
|
|
+ $cprId = (int)($token['cpr_id'] ?? 0);
|
|
|
+ if ($cprId <= 0) {
|
|
|
+ return ResponseLib::sendFail('Token não está vinculado a uma CPR', ['token_id' => $tokenId], 'E_CPR_NOT_FOUND')->withStatus(409);
|
|
|
+ }
|
|
|
+
|
|
|
if ((int)$orderbook['company_id'] !== $companyId) {
|
|
|
return ResponseLib::sendFail('Orderbook não pertence à empresa autenticada', [], 'E_FORBIDDEN')->withStatus(403);
|
|
|
}
|
|
|
@@ -98,6 +124,7 @@ class OrderbookTransferController
|
|
|
try {
|
|
|
$transferResult = $this->tokenTransferService->transferFrom($serverAddress, (string)$wallet['wallet_address'], $tokenExternalId);
|
|
|
$this->orderbookTransferModel->markCompleted((int)$orderbook['orderbook_id']);
|
|
|
+ $this->cprModel->updateCompanyId($cprId, $companyId);
|
|
|
} catch (\Throwable $e) {
|
|
|
return ResponseLib::sendFail('Falha ao transferir token: ' . $e->getMessage(), [], 'E_TRANSFER')->withStatus(500);
|
|
|
}
|