Skip to content

Commit 899c1df

Browse files
opening hours entity is now created with factory
1 parent 8d79c7a commit 899c1df

4 files changed

Lines changed: 81 additions & 20 deletions

File tree

src/Model/Store/OpeningHours/OpeningHours.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public function __construct(OpeningHoursData $openingHourData)
6666
$this->setData($openingHourData);
6767
}
6868

69+
/**
70+
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData $openingHourData
71+
*/
72+
public function edit(OpeningHoursData $openingHourData): void
73+
{
74+
$this->setData($openingHourData);
75+
}
76+
6977
/**
7078
* @return int
7179
*/
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Shopsys\FrameworkBundle\Model\Store\OpeningHours;
6+
7+
use Shopsys\FrameworkBundle\Component\EntityExtension\EntityNameResolver;
8+
9+
class OpeningHoursFactory
10+
{
11+
/**
12+
* @param \Shopsys\FrameworkBundle\Component\EntityExtension\EntityNameResolver $entityNameResolver
13+
*/
14+
public function __construct(
15+
protected readonly EntityNameResolver $entityNameResolver,
16+
) {
17+
}
18+
19+
/**
20+
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData $data
21+
* @return \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours
22+
*/
23+
public function create(OpeningHoursData $data): OpeningHours
24+
{
25+
$classData = $this->entityNameResolver->resolve(OpeningHours::class);
26+
27+
return new $classData($data);
28+
}
29+
}

src/Model/Store/Store.php

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use Shopsys\FrameworkBundle\Model\Store\Exception\StoreDomainNotFoundException;
1717
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\Exception\OpeningHoursNotFoundException;
1818
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours;
19-
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData;
2019

2120
/**
2221
* @ORM\Table(name="stores")
@@ -104,7 +103,7 @@ class Store implements OrderableEntityInterface
104103

105104
/**
106105
* @var \Doctrine\Common\Collections\Collection<int,\Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours>
107-
* @ORM\OneToMany(targetEntity="\Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours", mappedBy="store", cascade={"persist", "remove"}, orphanRemoval=true, fetch="EAGER")
106+
* @ORM\OneToMany(targetEntity="\Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours", mappedBy="store", cascade={"persist", "remove"}, orphanRemoval=true)
108107
* @ORM\OrderBy({"dayOfWeek" = "ASC"})
109108
*/
110109
protected $openingHours;
@@ -160,6 +159,18 @@ public function edit(StoreData $storeData)
160159
{
161160
$this->setDomains($storeData);
162161
$this->setData($storeData);
162+
163+
foreach ($this->openingHours as $index => $openingHours) {
164+
$openingHours->edit($storeData->openingHours[$index]);
165+
}
166+
}
167+
168+
/**
169+
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours[] $openingHours
170+
*/
171+
public function setOpeningHours(array $openingHours): void
172+
{
173+
$this->openingHours = new ArrayCollection($openingHours);
163174
}
164175

165176
/**
@@ -176,7 +187,6 @@ public function setData(StoreData $storeData): void
176187
$this->city = $storeData->city;
177188
$this->postcode = $storeData->postcode;
178189
$this->country = $storeData->country;
179-
$this->openingHours = $this->createOpeningHours($storeData->openingHours);
180190
$this->contactInfo = $storeData->contactInfo;
181191
$this->specialMessage = $storeData->specialMessage;
182192
$this->locationLatitude = $storeData->locationLatitude;
@@ -443,20 +453,4 @@ public function setDefault(): void
443453
{
444454
$this->isDefault = true;
445455
}
446-
447-
/**
448-
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData[] $openingHours
449-
* @return \Doctrine\Common\Collections\ArrayCollection
450-
*/
451-
protected function createOpeningHours(array $openingHours): ArrayCollection
452-
{
453-
$openingHours = array_map(function (OpeningHoursData $openingHourData): OpeningHours {
454-
$openingHours = new OpeningHours($openingHourData);
455-
$openingHours->setStore($this);
456-
457-
return $openingHours;
458-
}, $openingHours);
459-
460-
return new ArrayCollection($openingHours);
461-
}
462456
}

src/Model/Store/StoreFactory.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@
55
namespace Shopsys\FrameworkBundle\Model\Store;
66

77
use Shopsys\FrameworkBundle\Component\EntityExtension\EntityNameResolver;
8+
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours;
9+
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData;
10+
use Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursFactory;
811

912
class StoreFactory
1013
{
1114
/**
1215
* @param \Shopsys\FrameworkBundle\Component\EntityExtension\EntityNameResolver $entityNameResolver
16+
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursFactory $openingHoursFactory
1317
*/
1418
public function __construct(
1519
protected readonly EntityNameResolver $entityNameResolver,
20+
protected readonly OpeningHoursFactory $openingHoursFactory,
1621
) {
1722
}
1823

@@ -24,6 +29,31 @@ public function create(StoreData $storeData): Store
2429
{
2530
$classData = $this->entityNameResolver->resolve(Store::class);
2631

27-
return new $classData($storeData);
32+
/** @var \Shopsys\FrameworkBundle\Model\Store\Store $store */
33+
$store = new $classData($storeData);
34+
35+
$store->setOpeningHours(
36+
$this->createOpeningHours($storeData->openingHours, $store),
37+
);
38+
39+
return $store;
40+
}
41+
42+
/**
43+
* @param \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHoursData[] $openingHoursData
44+
* @param \Shopsys\FrameworkBundle\Model\Store\Store $store
45+
* @return \Shopsys\FrameworkBundle\Model\Store\OpeningHours\OpeningHours[]
46+
*/
47+
protected function createOpeningHours(array $openingHoursData, Store $store): array
48+
{
49+
return array_map(
50+
function (OpeningHoursData $openingHourData) use ($store): OpeningHours {
51+
$openingHours = $this->openingHoursFactory->create($openingHourData);
52+
$openingHours->setStore($store);
53+
54+
return $openingHours;
55+
},
56+
$openingHoursData,
57+
);
2858
}
2959
}

0 commit comments

Comments
 (0)