. */ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\Category; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use Illuminate\Support\Collection; use Log; /** * Class CategoryTransformer */ class CategoryTransformer extends AbstractTransformer { /** @var CategoryRepositoryInterface */ private $repository; /** * CategoryTransformer constructor. * * @codeCoverageIgnore */ public function __construct() { $this->repository = app(CategoryRepositoryInterface::class); if ('testing' === config('app.env')) { Log::warning(sprintf('%s should not be instantiated in the TEST environment!', get_class($this))); } } /** * Convert category. * * @param Category $category * * @return array */ public function transform(Category $category): array { $this->repository->setUser($category->user); $spent = []; $earned = []; $start = $this->parameters->get('start'); $end = $this->parameters->get('end'); if (null !== $start && null !== $end) { $earned = array_values($this->repository->earnedInPeriod($category, new Collection, $start, $end)); $spent = array_values($this->repository->spentInPeriod($category, new Collection, $start, $end)); } $data = [ 'id' => (int)$category->id, 'created_at' => $category->created_at->toAtomString(), 'updated_at' => $category->updated_at->toAtomString(), 'name' => $category->name, 'spent' => $spent, 'earned' => $earned, 'links' => [ [ 'rel' => 'self', 'uri' => '/categories/' . $category->id, ], ], ]; return $data; } }