/
AleksWork
/
diary_plants
Обзор
Документация
Войти
/
AleksWork
/
diary_plants
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/Domain/Service/FertilizerService.php
232 строки
7 KB
AlexeySerov
Add vote to fertilizer manager
14 май 2026, 10:55
14 май 2026, 10:55
e71d853
Код
Авторство
О чём код?
<?php namespace App\Domain\Service; use DateTimeImmutable; use App\Domain\Entity\Fertilizer; use App\Domain\Model\Fertilizer\FertilizerModel; use App\Domain\Model\Fertilizer\CreateFertilizerModel; use App\Domain\Model\Fertilizer\UpdateFertilizerModel; use App\Domain\Repository\FertilizerRepositoryInterface; use App\Domain\ValueObject\Preparation\PreparationVolume; use App\Domain\ValueObject\Preparation\PreparationDetails; use App\Controller\Web\Dashboard\Fertilizer\EditFertilizer\Input\EditFertilizerDTO; use App\Controller\Web\Dashboard\Fertilizer\CreateFertilizer\Input\CreateFertilizerDTO; class FertilizerService { public function __construct( private readonly GroupService $groupService, private readonly MarkerService $markerService, private readonly ModelFactory $modelFactory, private readonly FertilizerRepositoryInterface $fertilizerRepository ) { } /** * @param int $groupId * @return FertilizerModel[] */ public function getFertilizersForDairy($groupId): array { return $this->fertilizerRepository->getFertilizersForDairy($groupId); } /** * @param int $fertilizerId * @return ?Fertilizer */ public function find(int $fertilizerId): ?Fertilizer { return $this->fertilizerRepository->find($fertilizerId); } /** * @return Fertilizer[] */ public function findAll(): array { return $this->fertilizerRepository->findAll(); } /** * @param int|null $groupId * @return FertilizerModel[] */ public function findAllByGroupId(?int $groupId = null): array { return $this->fertilizerRepository->findAllByGroupId($groupId); } /** * @param string $title * @return FertilizerModel[] */ public function findFertilizersByTitle(string $title): array { return $this->fertilizerRepository->findFertilizersByTitle($title); } /** * @param string $manufacturer * @return FertilizerModel[] */ public function findFertilizersByManufacturer(string $manufacturer): array { return $this->fertilizerRepository->findFertilizersByManufacturer($manufacturer); } /** * @param DateTimeImmutable $date * @return FertilizerModel[] */ public function findFertilizersByUseDate(DateTimeImmutable $date): array { return $this->fertilizerRepository->findFertilizersByUseDate($date); } /** * @param int $page * @param int $perPage * @return FertilizerModel[] */ public function getFertilizersPaginated(int $page, int $perPage): array { return $this->fertilizerRepository->getFertilizersPaginated($page, $perPage); } /** * @param int $page * @param int $perPage * @param int|null $groupId * @return FertilizerModel[] */ public function getFertilizersPaginatedByGroupId(int $page, int $perPage, ?int $groupId = null): array { return $this->fertilizerRepository->getFertilizersPaginatedByGroupId($page, $perPage, $groupId); } /** * @param CreateFertilizerModel $createFertilizerModel * @return FertilizerModel */ public function create(CreateFertilizerModel $createFertilizerModel): FertilizerModel { $group = $this->groupService->find($createFertilizerModel->groupId); $marker = $this->markerService->find($createFertilizerModel->markerId); $fertilizer = new Fertilizer( $group, $marker, $createFertilizerModel->title, new PreparationVolume( $createFertilizerModel->amount, $createFertilizerModel->applicationRate ), new PreparationDetails( $createFertilizerModel->manufacturer, $createFertilizerModel->description, $createFertilizerModel->comment ) ); $this->fertilizerRepository->create($fertilizer); return $this->fertilizerRepository->toModel($fertilizer); } /** * @param CreateFertilizerDTO $dto * @return FertilizerModel */ public function createFromCreateFertilizerDTO(CreateFertilizerDTO $dto): FertilizerModel { $model = $this->modelFactory->makeModel( CreateFertilizerModel::class, $dto->groupId, $dto->markerId, $dto->title, $dto->amount, $dto->applicationRate, $dto->manufacturer, $dto->description, $dto->comment ); return $this->create($model); } /** * @param Fertilizer $fertilizer * @param UpdateFertilizerModel $updateFertilizerModel * @return FertilizerModel */ public function update(Fertilizer $fertilizer, UpdateFertilizerModel $updateFertilizerModel): FertilizerModel { $group = $this->groupService->find($updateFertilizerModel->groupId); $marker = $this->markerService->find($updateFertilizerModel->markerId); $fertilizer ->moveToGroup($group) ->changeFieldsWithMarker( $marker, $updateFertilizerModel->title, new PreparationVolume( $updateFertilizerModel->amount, $updateFertilizerModel->applicationRate ), new PreparationDetails( $updateFertilizerModel->manufacturer, $updateFertilizerModel->description, $updateFertilizerModel->comment ) ); $this->fertilizerRepository->update(); return $this->fertilizerRepository->toModel($fertilizer); } /** * @param Fertilizer $fertilizer * @param EditFertilizerDTO $dto * @return FertilizerModel */ public function updateFromEditFertilizerDTO(Fertilizer $fertilizer, EditFertilizerDTO $dto): FertilizerModel { $model = $this->modelFactory->makeModel( UpdateFertilizerModel::class, $dto->groupId, $dto->markerId, $dto->title, $dto->amount, $dto->applicationRate, $dto->manufacturer, $dto->description, $dto->comment ); return $this->update($fertilizer, $model); } /** * @param int $fertilizerId * @return void */ public function removeById(int $fertilizerId): void { $fertilizer = $this->fertilizerRepository->find($fertilizerId); if ($fertilizer !== null) { $this->fertilizerRepository->remove($fertilizer); } } /** * @param Fertilizer $fertilizer * @return void */ public function removeFertilizer(Fertilizer $fertilizer): void { $this->fertilizerRepository->remove($fertilizer); } }