Files
eatvio-infra/database/factories/DietFactory.php
2023-12-29 10:58:52 +03:00

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
];
}
}