forked from eatvio/eatvio-infra
90 lines
3.3 KiB
PHP
90 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace Database\Factories;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
|
use FakerRestaurant\Provider\en_US\Restaurant;
|
|
use App\Models\Diet;
|
|
use App\Models\User;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Http\File;
|
|
|
|
/**
|
|
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Diet>
|
|
*/
|
|
class DietFactory extends Factory
|
|
{
|
|
|
|
/**
|
|
* Define the model's default state.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function definition(): array
|
|
{
|
|
$faker = \Faker\Factory::create();
|
|
$this->faker->addProvider(new Restaurant($faker));
|
|
$dietDuration = $this->faker->randomElement([7, 14, 21]);
|
|
$dietState = $this->faker->randomElement(['active','draft','archived']);
|
|
$numberOfDefinedDietTypes = $this->faker->numberBetween(1, 4);
|
|
$expectedDietTypes = ['meat', 'veg', 'corb', 'alko'];
|
|
$selectedDietTypes = $this->faker->randomElements($expectedDietTypes, $numberOfDefinedDietTypes);
|
|
$dietTypes = array_reduce(
|
|
$selectedDietTypes,
|
|
function($acc, $el) {
|
|
$acc[$el] = true;
|
|
return $acc;
|
|
},
|
|
[]
|
|
);
|
|
$dietEatingTypes = ['breakfast', 'dinner', 'supper', 'lunch', 'snacks'];
|
|
$dailySchedule = [];
|
|
$images = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.png', '8.png', '9.jpg', '10.png'];
|
|
Storage::fake('diets');
|
|
$imageFileKey = $this->faker->numberBetween(0, 9);
|
|
$imageFilePath = 'database/assets/images/diets/' . $images[$imageFileKey];
|
|
$file = new File($imageFilePath);
|
|
$fileLocalPath = Storage::putFile('diets', $file, 'public');
|
|
|
|
for($day = 1; $day <= $dietDuration ; $day++) {
|
|
foreach($dietEatingTypes as $eatingType) {
|
|
|
|
$numberOfProductsInCurrentMeel = $this->faker->numberBetween(1, 4);
|
|
|
|
for(;$numberOfProductsInCurrentMeel > 0; $numberOfProductsInCurrentMeel--) {
|
|
$meelName = $this->faker->foodName();
|
|
$dailySchedule[$day][$eatingType][] = [
|
|
'name' => $meelName,
|
|
'quantity' => $this->faker->numberBetween(1, 1000),
|
|
'portion' => $this->faker->randomElement(['grams', 'pcs', 'milliliters']),
|
|
'uniq' => $meelName . '-' . time(),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$dietName = $this->faker->randomElement([
|
|
$this->faker->foodName(),
|
|
$this->faker->beverageName(),
|
|
$this->faker->dairyName(),
|
|
$this->faker->vegetableName(),
|
|
$this->faker->fruitName(),
|
|
$this->faker->meatName(),
|
|
$this->faker->sauceName(),
|
|
]);
|
|
|
|
$dietNamePrefix = $this->faker->randomElement(['Super', 'Keto', 'Fast', 'Detox', 'Power Of', 'Green', 'Healthy', 'Turbo']);
|
|
|
|
return [
|
|
'name' => $dietNamePrefix . " " . $dietName . " Diet",
|
|
'duration' => $dietDuration,
|
|
'state' => $dietState,
|
|
'image' => $fileLocalPath,
|
|
'type' => $dietTypes,
|
|
'details' => $this->faker->paragraph(3, true),
|
|
'daily_schedule' => $dailySchedule
|
|
];
|
|
}
|
|
}
|