From d52d106ec06300e9751f3b380c730635ec93c25d Mon Sep 17 00:00:00 2001 From: AlexP Date: Mon, 20 May 2024 12:27:16 +0500 Subject: [PATCH] STA-1046 | sinc entity factories --- .../Service/NewsPrepareResponseService.php | 4 +-- app/src/Shared/Entity/Restaurants.php | 13 ++++++++++ .../EntityFactory/NewsEntityFactory.php} | 9 ++++--- .../EntityFactory/RestaurantEntityFactory.php | 17 +++++++++++++ .../Shared/EventListener/NewsPerCreate.php | 2 +- .../EventListener/RestaurantPerCreate.php | 25 +++++++++++++++++++ .../Repository/RestaurantsRepository.php | 8 ++++++ 7 files changed, 71 insertions(+), 7 deletions(-) rename app/src/{News/EntityFabric/NewsEntityFabric.php => Shared/EntityFactory/NewsEntityFactory.php} (94%) create mode 100644 app/src/Shared/EntityFactory/RestaurantEntityFactory.php create mode 100644 app/src/Shared/EventListener/RestaurantPerCreate.php diff --git a/app/src/News/Service/NewsPrepareResponseService.php b/app/src/News/Service/NewsPrepareResponseService.php index 7836146..24a680e 100644 --- a/app/src/News/Service/NewsPrepareResponseService.php +++ b/app/src/News/Service/NewsPrepareResponseService.php @@ -10,13 +10,13 @@ use App\News\DtoFactory\NewsDetailElementDtoFactory; use App\News\DtoFactory\NewsFilterVariantsDtoFactory; use App\News\DtoFactory\NewsListDtoFactory; use App\News\DtoFactory\NewsListingElementDtoFactory; -use App\News\EntityFabric\NewsEntityFabric; use App\News\Request\NewsCreateRequest; use App\News\Request\NewsDetailRequest; use App\News\Request\NewsFullUpdateRequest; use App\News\Request\NewsListingRequest; use App\News\Request\NewsPartUpdateRequest; use App\Shared\DtoFactory\PaginationDtoFactory; +use App\Shared\EntityFactory\NewsEntityFactory; use App\Shared\Error\NotFoundError; use App\Shared\Repository\NewsCategoriesRepository; use App\Shared\Repository\NewsRepository; @@ -32,7 +32,7 @@ class NewsPrepareResponseService private readonly NewsListDtoFactory $listingFactory, private readonly NewsCategoryDtoFactory $categoryFactory, private readonly NewsDetailElementDtoFactory $detailElementFactory, - private readonly NewsEntityFabric $entityFabric, + private readonly NewsEntityFactory $entityFabric, ) { } diff --git a/app/src/Shared/Entity/Restaurants.php b/app/src/Shared/Entity/Restaurants.php index 11033eb..7a8e894 100644 --- a/app/src/Shared/Entity/Restaurants.php +++ b/app/src/Shared/Entity/Restaurants.php @@ -393,4 +393,17 @@ class Restaurants return $this; } + + #[ORM\PrePersist] + public function setCreatedAtValue(): void + { + $this->createdAt = new DateTimeImmutable(); + $this->updateAt = new DateTimeImmutable(); + } + + #[ORM\PreUpdate] + public function setUpdateAtValue(): void + { + $this->updateAt = new DateTimeImmutable(); + } } diff --git a/app/src/News/EntityFabric/NewsEntityFabric.php b/app/src/Shared/EntityFactory/NewsEntityFactory.php similarity index 94% rename from app/src/News/EntityFabric/NewsEntityFabric.php rename to app/src/Shared/EntityFactory/NewsEntityFactory.php index 65f36c8..abcf0b6 100644 --- a/app/src/News/EntityFabric/NewsEntityFabric.php +++ b/app/src/Shared/EntityFactory/NewsEntityFactory.php @@ -1,6 +1,6 @@ */ private readonly Collection $newsSetters; @@ -25,7 +25,7 @@ class NewsEntityFabric private readonly NewsCategoriesRepository $categoriesRepository, private readonly FileRepository $fileRepository, ) { - $this->newsSetters = $this->getSetters(); + $this->newsSetters = $this->setNewsSetters(); } public function create(NewsCreateRequest $request): News @@ -72,7 +72,8 @@ class NewsEntityFabric return $news; } - private function getSetters(): Collection + /** @return Collection */ + private function setNewsSetters(): Collection { $newsSetters = new Collection('callable'); diff --git a/app/src/Shared/EntityFactory/RestaurantEntityFactory.php b/app/src/Shared/EntityFactory/RestaurantEntityFactory.php new file mode 100644 index 0000000..a38f1f7 --- /dev/null +++ b/app/src/Shared/EntityFactory/RestaurantEntityFactory.php @@ -0,0 +1,17 @@ + */ + private readonly Collection $restaurantSetters; + + /** @return Collection */ + private function setRestaurantSetters(): Collection + { + + } +} \ No newline at end of file diff --git a/app/src/Shared/EventListener/NewsPerCreate.php b/app/src/Shared/EventListener/NewsPerCreate.php index 41a5332..ffb29c0 100644 --- a/app/src/Shared/EventListener/NewsPerCreate.php +++ b/app/src/Shared/EventListener/NewsPerCreate.php @@ -17,7 +17,7 @@ class NewsPerCreate public function preFlush(News $news, PreFlushEventArgs $args) { if ($news->getSort() === null) { - $news->setSort($news->getSort() + 1); + $news->setSort($this->newsRepository->getMaxValueSort() + 1); } if ($news->isMainPageRender()) { diff --git a/app/src/Shared/EventListener/RestaurantPerCreate.php b/app/src/Shared/EventListener/RestaurantPerCreate.php new file mode 100644 index 0000000..72f1729 --- /dev/null +++ b/app/src/Shared/EventListener/RestaurantPerCreate.php @@ -0,0 +1,25 @@ +getSort() === null) { + $restaurant->setSort($this->restaurantsRepository->getMaxValueSort() + 1); + } + } +} diff --git a/app/src/Shared/Repository/RestaurantsRepository.php b/app/src/Shared/Repository/RestaurantsRepository.php index 48eef29..5bbf103 100644 --- a/app/src/Shared/Repository/RestaurantsRepository.php +++ b/app/src/Shared/Repository/RestaurantsRepository.php @@ -24,6 +24,14 @@ class RestaurantsRepository extends ServiceEntityRepository parent::__construct($registry, Restaurants::class); } + public function getMaxValueSort(): int + { + return $this->createQueryBuilder('r') + ->select('MAX(r.sort)') + ->getQuery() + ->getSingleScalarResult(); + } + /** @return Collection */ protected function toCollection(QueryBuilder $query): Collection { -- GitLab