TokenModel.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Models;
  3. class TokenModel
  4. {
  5. private \PDO $pdo;
  6. public function __construct()
  7. {
  8. if (isset($GLOBALS['pdo']) && $GLOBALS['pdo'] instanceof \PDO) {
  9. $this->pdo = $GLOBALS['pdo'];
  10. return;
  11. }
  12. throw new \RuntimeException('Global PDO connection not initialized');
  13. }
  14. public function getByUf(string $uf): array
  15. {
  16. $stmt = $this->pdo->prepare('SELECT token_id, token_external_id, token_commodities_amount, token_commodities_value, token_uf, token_city, token_content, token_flag, wallet_id, chain_id, commodities_id, cpr_id, user_id FROM "token" WHERE token_uf = :uf ORDER BY token_id');
  17. $stmt->execute(['uf' => $uf]);
  18. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  19. }
  20. public function getByUfAndCommodityName(string $uf, string $commoditiesName): array
  21. {
  22. $sql = 'SELECT t.token_id, t.token_external_id, t.token_commodities_amount, t.token_commodities_value, t.token_uf, t.token_city, t.token_content, t.token_flag, t.wallet_id, t.chain_id, t.commodities_id, t.cpr_id, t.user_id
  23. FROM "token" t
  24. JOIN "commodities" c ON c.commodities_id = t.commodities_id
  25. WHERE t.token_uf = :uf AND LOWER(TRIM(c.commodities_name)) = LOWER(TRIM(:name))
  26. ORDER BY t.token_id';
  27. $stmt = $this->pdo->prepare($sql);
  28. $stmt->execute(['uf' => $uf, 'name' => $commoditiesName]);
  29. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  30. }
  31. public function getByCompanyId(int $companyId): array
  32. {
  33. $sql = 'SELECT t.token_id,
  34. t.token_external_id,
  35. t.token_commodities_amount,
  36. t.token_commodities_value,
  37. t.token_uf,
  38. t.token_city,
  39. t.token_content,
  40. t.token_flag,
  41. t.wallet_id,
  42. t.chain_id,
  43. t.commodities_id,
  44. t.cpr_id,
  45. t.user_id,
  46. c.cpr_product_name
  47. FROM "token" t
  48. INNER JOIN "wallet" w ON w.wallet_id = t.wallet_id
  49. LEFT JOIN "cpr" c ON c.cpr_id = t.cpr_id
  50. LEFT JOIN "orderbook" o ON o.token_id = t.token_id AND o.status_id = 0
  51. WHERE w.company_id = :company_id
  52. AND o.orderbook_id IS NULL
  53. ORDER BY t.token_id';
  54. $stmt = $this->pdo->prepare($sql);
  55. $stmt->execute(['company_id' => $companyId]);
  56. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  57. }
  58. public function findByCprId(int $cprId, bool $forUpdate = false): ?array
  59. {
  60. $sql = 'SELECT token_id,
  61. token_external_id,
  62. token_commodities_amount,
  63. token_commodities_value,
  64. token_uf,
  65. token_city,
  66. token_content,
  67. token_flag,
  68. wallet_id,
  69. chain_id,
  70. commodities_id,
  71. cpr_id,
  72. user_id
  73. FROM "token"
  74. WHERE cpr_id = :cpr_id
  75. ORDER BY token_id DESC
  76. LIMIT 1';
  77. if ($forUpdate) {
  78. $sql .= ' FOR UPDATE';
  79. }
  80. $stmt = $this->pdo->prepare($sql);
  81. $stmt->execute(['cpr_id' => $cprId]);
  82. $record = $stmt->fetch(\PDO::FETCH_ASSOC);
  83. return $record ?: null;
  84. }
  85. public function updateCommoditiesValue(int $tokenId, float $value): void
  86. {
  87. $stmt = $this->pdo->prepare(
  88. 'UPDATE "token"
  89. SET token_commodities_value = :value
  90. WHERE token_id = :token_id'
  91. );
  92. $stmt->execute([
  93. 'value' => $value,
  94. 'token_id' => $tokenId,
  95. ]);
  96. }
  97. }