Newer
Older
TillQliro / Model / ResourceModel / LogRecord.php
@Jonas Jonsson Jonas Jonsson on 2 Apr 2024 2 KB Initial
<?php
/**
 * Copyright © Qliro AB. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace Qliro\QliroOne\Model\ResourceModel;

use Qliro\QliroOne\Model\Logger\ConnectionProvider;
use Qliro\QliroOne\Model\LogRecord as LogRecordModel;
use Magento\Framework\Model\ResourceModel\Db\Context;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
use Qliro\QliroOne\Api\Data\LogRecordInterface;

class LogRecord extends AbstractDb
{
    const TABLE_LOG = 'qliroone_log';
    const RECENT_EVENT = 60;    // when patching merchant reference, look this many seconds back for recent logging

    /**
     * @var \Qliro\QliroOne\Model\Logger\ConnectionProvider
     */
    private $connectionProvider;

    /**
     * LogRecord constructor.
     *
     * @param Context $context
     * @param \Qliro\QliroOne\Model\Logger\ConnectionProvider $connectionProvider
     */
    public function __construct(
        Context $context,
        ConnectionProvider $connectionProvider
    ) {
        parent::__construct($context);
        $this->connectionProvider = $connectionProvider;
    }

    protected function _construct()
    {
        $this->_init(self::TABLE_LOG, LogRecordModel::FIELD_ID);
    }

    /**
     * When we have a merchantReference, we should patch any recent logging to ensure that the reference is present
     * on all log lines.
     *
     * @param string $merchantReference
     */
    public function patchMerchantReference($merchantReference)
    {
        /** @var \Magento\Framework\DB\Adapter\AdapterInterface $connection */
        $connection = $this->connectionProvider->getConnection();

        $where = [
            sprintf("%s = ?", LogRecordInterface::FIELD_PROCESS_ID) => \getmypid(),
            sprintf("%s = ?", LogRecordInterface::FIELD_REFERENCE) => '',
            sprintf("%s >= NOW() - ?", LogRecordInterface::FIELD_DATE) => self::RECENT_EVENT
        ];
        try {
            $rows = $connection->update($this->getTable(
                self::TABLE_LOG),
                [LogRecordInterface::FIELD_REFERENCE => $merchantReference],
                $where);
        } catch (\Exception $e) {
        }
    }
}