91 lines
2.7 KiB
PHP
91 lines
2.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Database\Factories;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
|
use Illuminate\Support\Collection;
|
|
use Toby\Eloquent\Models\Resume;
|
|
use Toby\Eloquent\Models\Technology;
|
|
|
|
class ResumeFactory extends Factory
|
|
{
|
|
protected $model = Resume::class;
|
|
|
|
public function definition(): array
|
|
{
|
|
return [
|
|
"name" => fn(array $attr) => empty($attr["user_id"]) ? $this->faker->name : null,
|
|
"description" => $this->faker->boolean(30) ? $this->faker->sentence : null,
|
|
"education" => $this->generateEducation(),
|
|
"languages" => $this->generateLanguages(),
|
|
"technologies" => $this->generateTechnologies(),
|
|
"projects" => $this->generateProjects(),
|
|
];
|
|
}
|
|
|
|
protected function generateEducation(): array
|
|
{
|
|
$items = [];
|
|
|
|
for ($i = 0; $i < $this->faker->numberBetween(1, 2); $i++) {
|
|
$items[] = [
|
|
"school" => $this->faker->sentence,
|
|
"degree" => $this->faker->sentence,
|
|
"fieldOfStudy" => $this->faker->sentence,
|
|
"startDate" => $this->faker->date,
|
|
"endDate" => $this->faker->date,
|
|
];
|
|
}
|
|
|
|
return $items;
|
|
}
|
|
|
|
protected function generateLanguages(): array
|
|
{
|
|
$languages = new Collection(["english", "polish", "germany"]);
|
|
$number = $this->faker->numberBetween(1, $languages->count());
|
|
|
|
return $languages->random($number)
|
|
->map(fn(string $language): array => [
|
|
"language" => $language,
|
|
"level" => $this->faker->numberBetween(1, 6),
|
|
])
|
|
->all();
|
|
}
|
|
|
|
protected function generateTechnologies(): array
|
|
{
|
|
$technologies = Technology::all();
|
|
$number = $this->faker->numberBetween(2, $technologies->count());
|
|
|
|
return $technologies->random($number)
|
|
->map(fn(string $technology): array => [
|
|
"technology" => $technology,
|
|
"level" => $this->faker->numberBetween(1, 5),
|
|
])
|
|
->all();
|
|
}
|
|
|
|
protected function generateProjects(): array
|
|
{
|
|
$items = [];
|
|
$technologies = Technology::all();
|
|
|
|
for ($i = 0; $i < $this->faker->numberBetween(1, 3); $i++) {
|
|
$number = $this->faker->numberBetween(2, $technologies->count());
|
|
|
|
$items[] = [
|
|
"description" => $this->faker->text,
|
|
"technologies" => $technologies->random($number)->all(),
|
|
"startDate" => $this->faker->date,
|
|
"endDate" => $this->faker->date,
|
|
"tasks" => $this->faker->text,
|
|
];
|
|
}
|
|
|
|
return $items;
|
|
}
|
|
}
|