Logger.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\ReleaseNotification\Model\ResourceModel\Viewer;
  8. use Magento\ReleaseNotification\Model\Viewer\Log;
  9. use Magento\ReleaseNotification\Model\Viewer\LogFactory;
  10. use Magento\Framework\App\ResourceConnection;
  11. /**
  12. * Release notification viewer log data logger.
  13. *
  14. * Saves and retrieves release notification viewer log data.
  15. */
  16. class Logger
  17. {
  18. /**
  19. * Log table name
  20. */
  21. const LOG_TABLE_NAME = 'release_notification_viewer_log';
  22. /**
  23. * @var Resource
  24. */
  25. private $resource;
  26. /**
  27. * @var LogFactory
  28. */
  29. private $logFactory;
  30. /**
  31. * Logger constructor.
  32. * @param ResourceConnection $resource
  33. * @param LogFactory $logFactory
  34. */
  35. public function __construct(
  36. ResourceConnection $resource,
  37. LogFactory $logFactory
  38. ) {
  39. $this->resource = $resource;
  40. $this->logFactory = $logFactory;
  41. }
  42. /**
  43. * Save (insert new or update existing) log.
  44. *
  45. * @param int $viewerId
  46. * @param string $lastViewVersion
  47. * @return bool
  48. */
  49. public function log(int $viewerId, string $lastViewVersion) : bool
  50. {
  51. /** @var \Magento\Framework\DB\Adapter\AdapterInterface $connection */
  52. $connection = $this->resource->getConnection(ResourceConnection::DEFAULT_CONNECTION);
  53. $connection->insertOnDuplicate(
  54. $this->resource->getTableName(self::LOG_TABLE_NAME),
  55. [
  56. 'viewer_id' => $viewerId,
  57. 'last_view_version' => $lastViewVersion
  58. ],
  59. [
  60. 'last_view_version'
  61. ]
  62. );
  63. return true;
  64. }
  65. /**
  66. * Get log by viewer Id.
  67. *
  68. * @param int $viewerId
  69. * @return Log
  70. */
  71. public function get(int $viewerId) : Log
  72. {
  73. return $this->logFactory->create(['data' => $this->loadLogData($viewerId)]);
  74. }
  75. /**
  76. * Load release notification viewer log data by viewer id
  77. *
  78. * @param int $viewerId
  79. * @return array
  80. */
  81. private function loadLogData(int $viewerId) : array
  82. {
  83. $connection = $this->resource->getConnection();
  84. $select = $connection->select()
  85. ->from($this->resource->getTableName(self::LOG_TABLE_NAME))
  86. ->where('viewer_id = ?', $viewerId);
  87. $data = $connection->fetchRow($select);
  88. if (!$data) {
  89. $data = [];
  90. }
  91. return $data;
  92. }
  93. }