repuve-backend-v1/database/factories/PackageFactory.php
2025-10-21 17:23:54 -06:00

77 lines
2.0 KiB
PHP

<?php
namespace Database\Factories;
use App\Models\Package;
use App\Models\Module;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Package>
*/
class PackageFactory extends Factory
{
protected $model = Package::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$year = fake()->numberBetween(2020, 2025);
$lot = 'LOTE-' . $year . '-' . fake()->numberBetween(1, 99);
$boxNumber = 'CAJA-' . strtoupper(fake()->bothify('??##'));
$startingPage = fake()->numberBetween(1, 100) * 100;
$endingPage = $startingPage + fake()->numberBetween(50, 200);
return [
'lot' => $lot,
'box_number' => $boxNumber,
'starting_page' => $startingPage,
'ending_page' => $endingPage,
'module_id' => Module::factory(),
];
}
/**
* Indicate that the package belongs to a specific module.
*/
public function forModule(int $moduleId): static
{
return $this->state(fn (array $attributes) => [
'module_id' => $moduleId,
]);
}
/**
* Create a small package (50-100 pages)
*/
public function small(): static
{
return $this->state(function (array $attributes) {
$startingPage = fake()->numberBetween(1, 50) * 100;
return [
'starting_page' => $startingPage,
'ending_page' => $startingPage + fake()->numberBetween(50, 100),
];
});
}
/**
* Create a large package (200-500 pages)
*/
public function large(): static
{
return $this->state(function (array $attributes) {
$startingPage = fake()->numberBetween(1, 100) * 100;
return [
'starting_page' => $startingPage,
'ending_page' => $startingPage + fake()->numberBetween(200, 500),
];
});
}
}