Skip to content

Commit

Permalink
Merge pull request #5587 from spryker/feature/te-3719/master-cart-pag…
Browse files Browse the repository at this point in the history
…e-optimisations

TE-3719 Cart page and Add to cart optimization
  • Loading branch information
demkos authored Jul 8, 2019
2 parents bc32f75 + 09e8f0b commit 0298e1a
Show file tree
Hide file tree
Showing 9 changed files with 158 additions and 9 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"spryker/application-extension": "^1.0.0",
"spryker/event-dispatcher-extension": "^1.0.0",
"spryker/kernel": "^3.0.0",
"spryker/locale-extension": "^1.0.0"
"spryker/locale-extension": "^1.0.0",
"spryker/propel-orm": "^1.8.0"
},
"require-dev": {
"spryker/config": "*",
Expand Down
4 changes: 3 additions & 1 deletion src/Spryker/Zed/Locale/Business/LocaleBusinessFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
/**
* @method \Spryker\Zed\Locale\LocaleConfig getConfig()
* @method \Spryker\Zed\Locale\Persistence\LocaleQueryContainerInterface getQueryContainer()
* @method \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface getRepository()
*/
class LocaleBusinessFactory extends AbstractBusinessFactory
{
Expand All @@ -26,7 +27,8 @@ public function createLocaleManager()
{
return new LocaleManager(
$this->getQueryContainer(),
$this->createTransferGenerator()
$this->createTransferGenerator(),
$this->getRepository()
);
}

Expand Down
5 changes: 2 additions & 3 deletions src/Spryker/Zed/Locale/Business/LocaleFacade.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

/**
* @method \Spryker\Zed\Locale\Business\LocaleBusinessFactory getFactory()
* @method \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface getRepository()
*/
class LocaleFacade extends AbstractFacade implements LocaleFacadeInterface
{
Expand Down Expand Up @@ -186,9 +187,7 @@ public function install()
}

/**
* Specification:
* - Returns an associative array of [locale_name => LocaleTransfer] pairs.
* - The locales returned are read from the store configuration and their data is read from database.
* {@inheritdoc}
*
* @api
*
Expand Down
49 changes: 45 additions & 4 deletions src/Spryker/Zed/Locale/Business/Manager/LocaleManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Spryker\Zed\Locale\Business\Exception\MissingLocaleException;
use Spryker\Zed\Locale\Business\TransferGeneratorInterface;
use Spryker\Zed\Locale\Persistence\LocaleQueryContainerInterface;
use Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface;

class LocaleManager
{
Expand All @@ -26,16 +27,24 @@ class LocaleManager
*/
protected $transferGenerator;

/**
* @var \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface|null
*/
protected $localeRepository;

/**
* @param \Spryker\Zed\Locale\Persistence\LocaleQueryContainerInterface $localeQueryContainer
* @param \Spryker\Zed\Locale\Business\TransferGeneratorInterface $transferGenerator
* @param \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface|null $localeRepository
*/
public function __construct(
LocaleQueryContainerInterface $localeQueryContainer,
TransferGeneratorInterface $transferGenerator
TransferGeneratorInterface $transferGenerator,
?LocaleRepositoryInterface $localeRepository = null
) {
$this->localeQueryContainer = $localeQueryContainer;
$this->transferGenerator = $transferGenerator;
$this->localeRepository = $localeRepository;
}

/**
Expand Down Expand Up @@ -176,8 +185,12 @@ public function deleteLocale($localeName)
*/
public function getLocaleCollection()
{
$availableLocales = Store::getInstance()->getLocales();
$storeInstance = Store::getInstance();
if ($this->localeRepository) {
return $this->getAvailableLocaleCollection($storeInstance);
}

$availableLocales = $storeInstance->getLocales();
$transferCollection = [];
foreach ($availableLocales as $localeName) {
$localeInfo = $this->getLocale($localeName);
Expand All @@ -188,8 +201,6 @@ public function getLocaleCollection()
}

/**
* @api
*
* @return array
*/
public function getAvailableLocales()
Expand All @@ -203,4 +214,34 @@ public function getAvailableLocales()

return $locales;
}

/**
* @param \Spryker\Shared\Kernel\Store $store
*
* @return \Generated\Shared\Transfer\LocaleTransfer[]
*/
protected function getAvailableLocaleCollection(Store $store): array
{
$availableLocales = $store->getLocales();

$localeTransfers = $this->localeRepository->getLocaleTransfersByLocaleNames($availableLocales);

return $this->indexLocaleTransfersByLocalename($localeTransfers);
}

/**
* @param \Generated\Shared\Transfer\LocaleTransfer[] $localeTransfers
*
* @return \Generated\Shared\Transfer\LocaleTransfer[]
*/
protected function indexLocaleTransfersByLocaleName(array $localeTransfers): array
{
$indexedLocaleTransfers = [];

foreach ($localeTransfers as $localeTransfer) {
$indexedLocaleTransfers[$localeTransfer->getLocaleName()] = $localeTransfer;
}

return $indexedLocaleTransfers;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
* @method \Spryker\Zed\Locale\LocaleConfig getConfig()
* @method \Spryker\Zed\Locale\Persistence\LocaleQueryContainerInterface getQueryContainer()
* @method \Spryker\Zed\Locale\Business\LocaleFacadeInterface getFacade()
* @method \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface getRepository()
*/
class LocaleCommunicationFactory extends AbstractCommunicationFactory
{
Expand Down
10 changes: 10 additions & 0 deletions src/Spryker/Zed/Locale/Persistence/LocalePersistenceFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@

use Orm\Zed\Locale\Persistence\SpyLocaleQuery;
use Spryker\Zed\Kernel\Persistence\AbstractPersistenceFactory;
use Spryker\Zed\Locale\Persistence\Propel\Mapper\LocaleMapper;

/**
* @method \Spryker\Zed\Locale\LocaleConfig getConfig()
* @method \Spryker\Zed\Locale\Persistence\LocaleQueryContainerInterface getQueryContainer()
* @method \Spryker\Zed\Locale\Persistence\LocaleRepositoryInterface getRepository()
*/
class LocalePersistenceFactory extends AbstractPersistenceFactory
{
Expand All @@ -23,4 +25,12 @@ public function createLocaleQuery()
{
return SpyLocaleQuery::create();
}

/**
* @return \Spryker\Zed\Locale\Persistence\Propel\Mapper\LocaleMapper
*/
public function createLocaleMapper(): LocaleMapper
{
return new LocaleMapper();
}
}
52 changes: 52 additions & 0 deletions src/Spryker/Zed/Locale/Persistence/LocaleRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace Spryker\Zed\Locale\Persistence;

use Generated\Shared\Transfer\LocaleTransfer;
use Propel\Runtime\Collection\ObjectCollection;
use Spryker\Zed\Kernel\Persistence\AbstractRepository;

/**
* @method \Spryker\Zed\Locale\Persistence\LocalePersistenceFactory getFactory()
*/
class LocaleRepository extends AbstractRepository implements LocaleRepositoryInterface
{
/**
* @param string[] $localeNames
*
* @return \Generated\Shared\Transfer\LocaleTransfer[]
*/
public function getLocaleTransfersByLocaleNames(array $localeNames): array
{
$localeEntities = $this->getFactory()->createLocaleQuery()
->filterByLocaleName_In($localeNames)
->find();

return $this->mapLocaleEntitiesToLocaleTransfers($localeEntities);
}

/**
* @param \Orm\Zed\Locale\Persistence\SpyLocale[]|\Propel\Runtime\Collection\ObjectCollection $localeEntities
*
* @return \Generated\Shared\Transfer\LocaleTransfer[]
*/
protected function mapLocaleEntitiesToLocaleTransfers(ObjectCollection $localeEntities): array
{
$localeTransfers = [];
$localeMapper = $this->getFactory()->createLocaleMapper();

foreach ($localeEntities as $localeEntity) {
$localeTransfer = new LocaleTransfer();
$localeTransfer = $localeMapper->mapLocaleEntityToLocaleTransfer($localeEntity, $localeTransfer);

$localeTransfers[] = $localeTransfer;
}

return $localeTransfers;
}
}
18 changes: 18 additions & 0 deletions src/Spryker/Zed/Locale/Persistence/LocaleRepositoryInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace Spryker\Zed\Locale\Persistence;

interface LocaleRepositoryInterface
{
/**
* @param string[] $localeNames
*
* @return \Generated\Shared\Transfer\LocaleTransfer[]
*/
public function getLocaleTransfersByLocaleNames(array $localeNames): array;
}
25 changes: 25 additions & 0 deletions src/Spryker/Zed/Locale/Persistence/Propel/Mapper/LocaleMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/

namespace Spryker\Zed\Locale\Persistence\Propel\Mapper;

use Generated\Shared\Transfer\LocaleTransfer;
use Orm\Zed\Locale\Persistence\SpyLocale;

class LocaleMapper
{
/**
* @param \Orm\Zed\Locale\Persistence\SpyLocale $localeEntity
* @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
*
* @return \Generated\Shared\Transfer\LocaleTransfer
*/
public function mapLocaleEntityToLocaleTransfer(SpyLocale $localeEntity, LocaleTransfer $localeTransfer): LocaleTransfer
{
return $localeTransfer->fromArray($localeEntity->toArray(), true);
}
}

0 comments on commit 0298e1a

Please sign in to comment.