-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrackerRepository.php
More file actions
72 lines (58 loc) · 2.06 KB
/
TrackerRepository.php
File metadata and controls
72 lines (58 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
/**
* Copyright © . All rights reserved.
* See LICENSE file for license details.
*/
declare(strict_types=1);
namespace OxidEsales\ExamplesModule\Tracker\Infrastructure\Repository;
use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface;
use OxidEsales\EshopCommunity\Internal\Transition\Utility\ContextInterface;
use OxidEsales\ExamplesModule\Tracker\Infrastructure\Factory\TrackerModelFactoryInterface;
use OxidEsales\ExamplesModule\Tracker\Model\TrackerInterface;
/**
* @extendable-class
*/
readonly class TrackerRepository implements TrackerRepositoryInterface
{
public function __construct(
private QueryBuilderFactoryInterface $queryBuilderFactory,
private ContextInterface $context,
private TrackerModelFactoryInterface $trackerModelFactory,
) {
}
public function getTrackerByUserId(string $userId): TrackerInterface
{
$trackerModel = $this->trackerModelFactory->create();
$trackerId = $this->getGreetingTrackerId($userId);
if ($trackerId) {
$trackerModel->load($trackerId);
}
//if it cannot be loaded from database, create a new object
if (!$trackerModel->isLoaded()) {
$trackerModel->assign([
'oxuserid' => $userId,
'oxshopid' => $this->context->getCurrentShopId(),
]);
}
return $trackerModel;
}
private function getGreetingTrackerId(string $userId): string
{
$queryBuilder = $this->queryBuilderFactory->create();
$parameters = [
'oxuserid' => $userId,
'oxshopid' => $this->context->getCurrentShopId(),
];
$result = $queryBuilder->select('oxid')
->from('oeem_tracker')
->where('oxuserid = :oxuserid')
->andWhere('oxshopid = :oxshopid')
->setParameters($parameters)
->setMaxResults(1)
->execute();
if (is_object($result)) {
$value = (string)$result->fetchOne();
}
return $value ?? '';
}
}