ldc-arcadia-api/src/Domain/Models/Entities/Inco/Composition/IncoComposition.php

97 lines
3.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Domain\Models\Entities\Inco\Composition;
use Domain\Builders\Inco\IncoCompositionBuilder;
use Domain\Models\ValueObjects\Inco\Composition\AminoAcids;
use Domain\Models\ValueObjects\Inco\Composition\CarbohydratesDetail;
use Domain\Models\ValueObjects\Inco\Composition\Energy;
use Domain\Models\ValueObjects\Inco\Composition\FattyAcids;
use Domain\Models\ValueObjects\Inco\Composition\FreshProduceAndNuts;
use Domain\Models\ValueObjects\Inco\Composition\Identification;
use Domain\Models\ValueObjects\Inco\Composition\IncoCompositionId;
use Domain\Models\ValueObjects\Inco\Composition\Minerals;
use Domain\Models\ValueObjects\Inco\Composition\NutriScore;
use Domain\Models\ValueObjects\Inco\Composition\NutriScorePoints;
use Domain\Models\ValueObjects\Inco\Composition\PortionMacronutrients;
use Domain\Models\ValueObjects\Inco\Composition\ReferenceIntakes;
use Domain\Models\ValueObjects\Inco\Composition\ReferenceMacronutrients;
use Domain\Models\ValueObjects\Inco\Composition\SpecialCompounds;
use Domain\Models\ValueObjects\Inco\Composition\Vitamins;
use Domain\Models\ValueObjects\Inco\IncoId;
use Shared\DDD\Model\Entity;
/** @implements Entity<IncoCompositionId> */
final readonly class IncoComposition implements Entity
{
private function __construct(
public IncoCompositionId $id,
public IncoId $idInco,
public Identification $identification,
public Energy $energy,
public ReferenceMacronutrients $referenceMacronutrients,
public PortionMacronutrients $portionMacronutrients,
public FreshProduceAndNuts $freshProduceAndNuts,
public ReferenceIntakes $referenceIntakes,
public NutriScore $nutriScore,
public NutriScorePoints $nutriScorePoints,
public Minerals $minerals,
public Vitamins $vitamins,
public CarbohydratesDetail $carbohydratesDetail,
public FattyAcids $fattyAcids,
public AminoAcids $aminoAcids,
public SpecialCompounds $specialCompounds,
) {
}
#[\Override]
public function id(): IncoCompositionId
{
return $this->id;
}
public static function builder(): IncoCompositionBuilder
{
return new IncoCompositionBuilder();
}
public static function hydrate(
IncoCompositionId $id,
IncoId $idInco,
Identification $identification,
Energy $energy,
ReferenceMacronutrients $referenceMacronutrients,
PortionMacronutrients $portionMacronutrients,
FreshProduceAndNuts $freshProduceAndNuts,
ReferenceIntakes $referenceIntakes,
NutriScore $nutriScore,
NutriScorePoints $nutriScorePoints,
Minerals $minerals,
Vitamins $vitamins,
CarbohydratesDetail $carbohydratesDetail,
FattyAcids $fattyAcids,
AminoAcids $aminoAcids,
SpecialCompounds $specialCompounds,
): self {
return new self(
id: $id,
idInco: $idInco,
identification: $identification,
energy: $energy,
referenceMacronutrients: $referenceMacronutrients,
portionMacronutrients: $portionMacronutrients,
freshProduceAndNuts: $freshProduceAndNuts,
referenceIntakes: $referenceIntakes,
nutriScore: $nutriScore,
nutriScorePoints: $nutriScorePoints,
minerals: $minerals,
vitamins: $vitamins,
carbohydratesDetail: $carbohydratesDetail,
fattyAcids: $fattyAcids,
aminoAcids: $aminoAcids,
specialCompounds: $specialCompounds,
);
}
}