inklabs/kommerce-core

View on GitHub
src/Service/ImageService.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php
namespace inklabs\kommerce\Service;

use inklabs\kommerce\Entity\Image;
use inklabs\kommerce\EntityDTO\UploadFileDTO;
use inklabs\kommerce\EntityRepository\ImageRepositoryInterface;
use inklabs\kommerce\EntityRepository\ProductRepositoryInterface;
use inklabs\kommerce\EntityRepository\TagRepositoryInterface;
use inklabs\kommerce\Lib\FileManagerInterface;
use inklabs\kommerce\Lib\UuidInterface;

class ImageService implements ImageServiceInterface
{
    use EntityValidationTrait;

    /** @var FileManagerInterface */
    private $fileManager;

    /** @var ImageRepositoryInterface */
    private $imageRepository;

    /** @var ProductRepositoryInterface */
    private $productRepository;

    /** @var TagRepositoryInterface */
    private $tagRepository;

    public function __construct(
        FileManagerInterface $fileManager,
        ImageRepositoryInterface $imageRepository,
        ProductRepositoryInterface $productRepository,
        TagRepositoryInterface $tagRepository
    ) {
        $this->imageRepository = $imageRepository;
        $this->productRepository = $productRepository;
        $this->tagRepository = $tagRepository;
        $this->fileManager = $fileManager;
    }

    public function create(Image & $image): void
    {
        $this->imageRepository->create($image);
    }

    public function update(Image & $image): void
    {
        $this->imageRepository->update($image);
    }

    public function createImageForProduct(UploadFileDTO $uploadFileDTO, UuidInterface $productId): void
    {
        $managedFile = $this->fileManager->saveFile($uploadFileDTO->getFilePath());

        $image = new Image(
            $managedFile->getUri(),
            $managedFile->getWidth(),
            $managedFile->getHeight()
        );

        $product = $this->productRepository->findOneById($productId);
        $product->addImage($image);

        $this->create($image);
    }

    public function createImageForTag(UploadFileDTO $uploadFileDTO, UuidInterface $tagId): void
    {
        $managedFile = $this->fileManager->saveFile($uploadFileDTO->getFilePath());

        $image = new Image(
            $managedFile->getUri(),
            $managedFile->getWidth(),
            $managedFile->getHeight()
        );

        $tag = $this->tagRepository->findOneById($tagId);
        $tag->addImage($image);

        $this->create($image);
    }

    public function findOneById(UuidInterface $id): Image
    {
        return $this->imageRepository->findOneById($id);
    }
}