ldc-ovoteam/domain/Models/Entities/Product.php
Jérémy Munsch 1a12569395
feat(directory): update ProductDirectory to use ProductId
- Changed the find method to accept ProductId instead of int.
- Added findBySlug method to retrieve products by slug.
- Updated getCategoryProducts method to return CategoryProducts type.

feat(eloquent): implement findBySlug in EloquentProductDirectory

- Implemented findBySlug method to retrieve products by slug.
- Updated find method to handle ProductId.

feat(dto): enhance CategoryProducts to serialize product IDs

- Updated CategoryProducts to serialize product IDs as strings.

feat(controller): modify ProductController to handle search limits

- Set limitPerCategory to -1 for search functionality.

refactor(model): change Product model ID to UUID

- Changed the id field in Product model to UUID.
- Updated related methods to handle UUIDs.

feat(migration): alter products and recipes tables for UUIDs

- Updated migrations to use UUIDs for primary keys in products and recipes tables.
- Adjusted foreign key constraints in product_recipe table.

feat(route): add route model binding for products

- Implemented route model binding for products using ProductId and slug.

chore(seed): remove CSV import calls from MandatorySeeder

- Removed calls to ImportProductsCsvSeeder and ImportRecipesCsvSeeder.

feat(entity): create ProductId and RecipeId value objects

- Added ProductId and RecipeId classes to encapsulate UUIDs.

feat(frontend): update TypeScript interfaces for products

- Updated TypeScript interfaces to reflect changes in product structure.
2026-09-21 11:43:39 +02:00

55 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Domain\Models\Entities;
use Domain\Models\ValueObjects\Entities\ProductId;
use Domain\Models\ValueObjects\Products\NutritionalValues;
use Domain\Models\ValueObjects\Products\ProductCategory;
use Domain\Models\ValueObjects\Products\Technology;
use Shared\DDD\Entity;
/**
* @implements Entity<ProductId>
*/
readonly class Product implements Entity
{
public function __construct(
public ProductId $id,
public string $name,
public string $slug,
public ProductCategory $category,
public Technology $technology,
public bool $isEgalim,
/** @var \Domain\Models\ValueObjects\Products\BreedingMethod[] */
public array $breedingMethods,
/** @var \Domain\Models\ValueObjects\Products\Business[] */
public array $businesses,
public string $detailsAndAdvantages,
/** @var \Domain\Models\ValueObjects\Products\ProductFormat[] */
public array $formats,
public string $handlingAdvices,
public ?string $ingredients,
public string $conservationBeforeOpening,
public ?string $conservationAfterOpening = null,
public ?NutritionalValues $nutritionalValues = null,
public ?string $picture = null,
public ?string $pictureAlt = null,
public ?string $pictureTitle = null,
public ?string $pdfFilePath = null,
/** @var \Ramsey\Uuid\UuidInterface[] */
public array $associatedRecipes = [],
) {
}
public function id(): ProductId
{
return $this->id;
}
public function __toString(): string
{
return $this->slug;
}
}