*/ class DietFactory extends Factory { /** * Define the model's default state. * * @return array */ 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 ]; } }